2012-10-05 55 views
11

Estoy tratando de entender por qué Firefox (estoy usando 15 pero es lo mismo incluso en las noches) no se comporta como WebKit cuando intento acceder a información de eventos de error.¿Cómo obtener los detalles del evento de error en Firefox usando addEventListener?

Ésta funciona en todas partes:

window.onerror = function(message, lineno, filename) { } 

Pero por supuesto que no quieren usar este.

Lo que hay que hacer es:

window.addEventListener('error', function(e) { 
    console.log(e.message); 
}, false); 

Desafortunadamente éste sólo funciona en WebKit. En Firefox se llama al controlador, pero el evento e está casi vacío: sin mensaje, sin número de línea, sin propiedades de nombre de archivo.

La prueba es muy mínima aquí: http://jsbin.com/efexiw/1/edit

no creo que esto es un error, aunque ... así que la pregunta es: ¿cómo puedo obtener los detalles del error en los últimos Firefox?

Respuesta

23

El HTML5 specification requires que un fallo de análisis hace que el navegador:

... informar del error de escritura, con la posición problemática (número de línea y columna), utilizando el objeto global como ... el objetivo.

Donde "report the error" incluye las etapas

  1. Deje mensaje sea una cadena definida por el usuario-agente que describe el error de una manera útil.

...

  1. Vamos evento sea una nueva confianza ErrorEvent objeto que no burbuja, pero es cancelable, y que tiene el nombre del evento error.

  2. Inicializar eventos 's message de atributos a mensaje.

...

  1. Despacho evento en objetivo.

Por lo tanto, cualquier navegador HTML5 compatible informará eventos de error de tiempo de análisis sintáctico en window, que incluyen un atributo message establecido en un "cadena definida-agente de usuario que describe el error de una manera útil. "Cualquier versión de navegador que no pueda hacer esto todavía no es compatible con HTML5 a este respecto.


Anteriormente (en el momento esta cuestión fue escrito), window.onerror dio información que no fue proporcionada por window.addEventListener("error"). Si tiene que usar una versión antigua de Firefox, puede safely use window.onerror:

// Example 1: 

// Prevent error dialogs from displaying -which is the window's normal 
// behavior- by overriding the default event handler for error events that 
// go to the window. 
window.onerror = null; 

// Example 2: 

var gOldOnError = window.onerror; 
// Override previous handler. 
window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    if (gOldOnError) 
    // Call previous handler. 
    return gOldOnError(errorMsg, url, lineNumber); 

    // Just let default handler run. 
    return false; 
} 
+0

acepto la respuesta porque al menos sé cómo manejar la situación. Lástima que no entendí por qué Firefox _seems_ ha eliminado esta "característica" (por lo que he estado leyendo en mis búsquedas son ejemplos antiguos que se supone que funcionan en FF y otros navegadores). – Claudio

+0

En FF 38, al menos, probablemente mucho antes, el evento de error proporcionado a addEventListener tiene al menos propiedades de mensaje, nombre de archivo y lineno ... tal vez más. Actualmente estoy en una búsqueda de más y de cualquier estándar que defina detalles. – Victoria

+0

Faltan detalles del evento de error, pero [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent) muestra .colno disponible, y la experimentación dice que .error.stack está disponible en FF38. – Victoria

Cuestiones relacionadas