Buscar..
Sintaxis
- window.onerror = function (eventOrMessage, url, lineNumber, colNumber, error) {...}
Parámetros
Parámetro | Detalles |
---|---|
eventOrMessage | Algunos navegadores llamarán al controlador de eventos con un solo argumento, un objeto de Event . Sin embargo, otros navegadores, especialmente los más antiguos y los más antiguos, proporcionarán un mensaje String como primer argumento. |
url | Si se llama a un controlador con más de 1 argumento, el segundo argumento generalmente es una URL de un archivo JavaScript que es la fuente del problema. |
número de línea | Si se llama a un controlador con más de 1 argumento, el tercer argumento es un número de línea dentro del archivo fuente de JavaScript. |
colNumber | Si se llama a un controlador con más de 1 argumento, el cuarto argumento es el número de columna dentro del archivo fuente de JavaScript. |
error | Si se llama a un controlador con más de 1 argumento, el quinto argumento es a veces un objeto Error que describe el problema. |
Observaciones
Desafortunadamente, window.onerror
históricamente ha sido implementado de manera diferente por cada proveedor. La información proporcionada en la sección Parámetros es una aproximación de lo que se puede esperar de diferentes navegadores y sus versiones.
Manejo de window.onerror para informar de todos los errores al servidor
El siguiente ejemplo escucha el evento window.onerror
y utiliza una técnica de baliza de imagen para enviar la información a través de los parámetros GET de una 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow