Sök…


Syntax

  • windows.onerror = funktion (eventOrMessage, url, lineNumber, colNumber, error) {...}

parametrar

Parameter detaljer
eventOrMessage Vissa webbläsare kommer att ringa händelseshanteraren med bara ett argument, ett Event . Men andra webbläsare, särskilt de äldre och äldre mobila, kommer att tillhandahålla ett String som ett första argument.
url Om en hanterare kallas med mer än ett argument är det andra argumentet vanligtvis en URL till en JavaScript-fil som är källan till problemet.
linje nummer Om en hanterare kallas med mer än ett argument är det tredje argumentet ett radnummer i JavaScript-källfilen.
colNumber Om en hanterare kallas med mer än ett argument, är det fjärde argumentet kolumnnumret i JavaScript-källfilen.
fel Om en hanterare kallas med mer än ett argument är det femte argumentet ibland ett Error beskriver problemet.

Anmärkningar

Tyvärr har window.onerror historiskt implementerats på olika sätt av varje leverantör. Informationen i avsnittet Parametrar är en approximation av vad man kan förvänta sig i olika webbläsare och deras versioner.

Hantera windows.onerror för att rapportera alla fel tillbaka till serversidan

Följande exempel lyssnar på window.onerror händelse och använder en bildfyrteknik för att skicka informationen via GET-parametrarna för en URL.

var hasLoggedOnce = false;

// Some browsers (at least Firefox) don't report line and column numbers
// when event is handled through window.addEventListener('error', fn). That's why
// a more reliable approach is to set an event listener via direct assignment.
window.onerror = function (eventOrMessage, url, lineNumber, colNumber, error) {
    if (hasLoggedOnce || !eventOrMessage) {
        // It does not make sense to report an error if:
        // 1. another one has already been reported -- the page has an invalid state and may produce way too many errors.
        // 2. the provided information does not make sense (!eventOrMessage -- the browser didn't supply information for some reason.)
        return;
    }
    hasLoggedOnce = true;
    if (typeof eventOrMessage !== 'string') {
        error = eventOrMessage.error;
        url = eventOrMessage.filename || eventOrMessage.fileName;
        lineNumber = eventOrMessage.lineno || eventOrMessage.lineNumber;
        colNumber = eventOrMessage.colno || eventOrMessage.columnNumber;
        eventOrMessage = eventOrMessage.message || eventOrMessage.name || error.message || error.name;
    }
    if (error && error.stack) {
        eventOrMessage = [eventOrMessage, '; Stack: ', error.stack, '.'].join('');
    }
    var jsFile = (/[^/]+\.js/i.exec(url || '') || [])[0] || 'inlineScriptOrDynamicEvalCode',
        stack = [eventOrMessage, ' Occurred in ', jsFile, ':', lineNumber || '?', ':', colNumber || '?'].join('');

    // shortening the message a bit so that it is more likely to fit into browser's URL length limit (which is 2,083 in some browsers)
    stack = stack.replace(/https?\:\/\/[^/]+/gi, '');
    // calling the server-side handler which should probably register the error in a database or a log file
    new Image().src = '/exampleErrorReporting?stack=' + encodeURIComponent(stack);
    
    // window.DEBUG_ENVIRONMENT a configurable property that may be set to true somewhere else for debugging and testing purposes.
    if (window.DEBUG_ENVIRONMENT) {
        alert('Client-side script failed: ' + stack);
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow