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