Skip to main content

Listening For JS Error Events

I was recently reading a blog article, Ben Nadel JS Error.   In the article Ben showed how to setup an error event handler that would be triggered for any failed image loads on a page.  This was done by attaching an error event handler to the body element.  Also he had to pass the last argument to addEventListener as true so that it would trigger in the capture phase of the event. This event handler will run whenever an external resource like an image or a style sheet fails to load on the page.

After some experimenting I found that if I attach the event to the window object it is triggered for all the failed resources and also for any javascript errors that happen on the page.  Setting this up on a site with quite a bit of traffic from different browsers was very interesting.  It was a bit overwhelming at first until some things were fixed and some checking was added to filter out some of the errors.  In the event handler the event and error information is being posted back to a server and then sent in an email so it can be reviewed.





Several errors showed up right away in IE Edge.  These were things that were looking for IE user agents and doing IE specific things.  Once those were fixed some failed loads for the Google ananlytics script started showing up in Firefox.  After doing a little testing I realized that Firefox blocks that script from loading if you have the "Do Not Track" option turned on. An error event is still generated, however, so the script was modified to skip those errors.

I went through several iterations of the script sending different information from the error event object.  Currently this is the script that is being used:


Initially values is set to contain the location of the current page so that information will always be available.  Then if the event contains an error object the stack and message are set into values.

Then all keys in the event object are looped over to get all the values.  If the value has an outerHTML method then that is called to get the value.  I'm using slice to limit the size of the outer HTML in case it is a large element containing many other elements.  Otherwise if the value contains a toString method then that is called.

After that the values object is converted to JSON.  This is only used as an easy way to filter out the analytics errors that are generated in Firefox.  Finally the results are posted to the server.  On the server those values, along with some other information from the post request like the user agent, are emailed.

It has been pretty interesting to see all these errors.  I still need to filter some things out and try to get some more information about some errors that don't seem to have a cause.  I think it will be very valuable to have this going forward.




Comments

Popular posts from this blog

Getting Hidden App Data From Your Google Drive

Some Android applications use space on your Google Drive to store data.  You can't see this data by browsing drive the normal way.  You can get access to it if you get the access token from the app and do a few other things.

I use an app to keep some notes and other things.  They require getting the paid version of the app to backup your data.  I wanted to see if I could get it myself without paying for the app.  I found out how to do this from this Stackoverflow post http://stackoverflow.com/questions/22832104/see-hidden-app-data-in-google-drive.  The example there uses php. Since I have been learning Python recently, I decided to see if I could do the same thing with Python.

 There is a pretty good explanation of why you need to go through all the steps you need to go through to get your data in the accepted answer for that post, so I won't go into too much detail about that here.


Using Brave

For a few weeks now I have been using the Brave browser.  It is based on Chromium, so switching from Chrome was a quick adjustment since I have been using Chrome for years.  Brave includes an ad blocking system that blocks what they call "very intrusive ads" and most attempts to track users across sites.  They have also setup a system using BAT currency that allows you to directly pay content providers that you visit.  I have also setup my site as a content provider so I can receive tokens.


Browser




The browser was created by Brendan Eich, the creator of Javascript.  The browser has worked well so far.  It updates automatically similarly to the way Chrome does.  They have a system for syncing bookmarks between your devices.  You also have a wallet built in for your BAT tokens.  I am using it on a Mac, and my Android phone.



Ads

The creators of the browser have also setup an ad network.  There are several ad providers involved, but I haven't looked into this too much yet.  Th…

Using IR codes from Broadlink backup file

This is a continuation of yesterdays post about the Broadlink RM2 wifi remote.  I was able to test out using the codes to control my remote today.  They are stored in JSON format in the broadlink backup file.  The backup file is a zip file.  After you extract it there is a folder named SharedData.  There are several files in the folder.  The one that seems to have all the codes is named jsonIrCode.  The data looks like an array of objects, each with a code and some other information.