Catch all JavaScript errors and send them to server
I'd check out window.onerror
Example:
window.onerror = function(message, url, lineNumber) {
//save error and send to server for example.
return true;
};
Keep in mind that returning true will prevent the firing of the default handler, and returning false will let the default handler run.
If your website is using Google Analytics, you can do what I do:
window.onerror = function(message, source, lineno, colno, error) {
if (error) message = error.stack;
ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}
A few comments on the code above:
- For modern browsers, the full stack trace is logged.
- For older browsers that don't capture the stack trace, the error message is logged instead. (Mostly earlier iOS version in my experience).
- The user's browser version is also logged, so you can see which OS/browser versions are throwing which errors. That simplifies bug prioritization and testing.
- This code works if you use Google Analytics with "analytics.js", like this. If you are using "gtag.js" instead, like this, you need to tweak the last line of the function. See here for details.
Once the code is in place, this is how you view your users' Javascript errors:
- In Google Analytics, click the
Behavior
section and then theTop Events
report. - You will get a list of Event Categories. Click
window.onerror
in the list. - You will see a list of Javascript stack traces and error messages. Add a column to the report for your users' OS/browser versions by clicking the
Secondary dimension
button and enteringEvent Label
in the textbox that appears. - The report will look like the screenshot below.
- To translate the OS/browser strings to more human-readable descriptions, I copy-paste them into https://developers.whatismybrowser.com/useragents/parse/