2 * Try to catch errors in modules which don't do their own error handling.
3 * @class mw.errorLogger
11 * Fired via mw.track when an error is not handled by local code and is caught by the
12 * window.onerror handler.
15 * @param {string} errorMessage Error errorMessage.
16 * @param {string} url URL where error was raised.
17 * @param {number} lineNumber Line number where error was raised.
18 * @param {number} [columnNumber] Line number where error was raised. Not all browsers
20 * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
21 * (even a primitive value) passed to a throw clause will end up here.
25 * Install a window.onerror handler that will report via mw.track, while preserving
26 * any previous handler.
27 * @param {Object} window
29 installGlobalHandler: function ( window
) {
30 // We will preserve the return value of the previous handler. window.onerror works the
31 // opposite way than normal event handlers (returning true will prevent the default
32 // action, returning false will let the browser handle the error normally, by e.g.
33 // logging to the console), so our fallback old handler needs to return false.
34 var oldHandler
= window
.onerror
|| function () { return false; };
37 * Dumb window.onerror handler which forwards the errors via mw.track.
40 window
.onerror = function ( errorMessage
, url
, lineNumber
, columnNumber
, errorObject
) {
41 mw
.track( 'global.error', { errorMessage
: errorMessage
, url
: url
,
42 lineNumber
: lineNumber
, columnNumber
: columnNumber
, errorObject
: errorObject
} );
43 return oldHandler
.apply( this, arguments
);
48 mw
.errorLogger
.installGlobalHandler( window
);