javascript - script - how to do a chrome extension
Extensión de Chrome: cómo atrapar/manejar los errores content-script globalmente? (4)
En una extensión de Chrome, ¿hay alguna forma de capturar / manejar globalmente los errores de Javascript que se producen en un script de contenido? (por ejemplo, para enviar a un servicio de seguimiento de errores de Javascript como bugsnag)
Lo ideal sería configurar un gestor global window.onerror
en la parte superior del script de contenido. Pero no funciona correctamente en Chrome 40: se detecta el error, pero la información suministrada es inútil: un mensaje de ''Error de script'' y no url, lineNumber, columna u objeto de error con stack.
Creé una extensión de prueba para mostrar este comportamiento reventado para las secuencias de comandos de contenido. Detalles abajo. Hallazgos interesantes:
-
window.onerror
funciona correctamente en un script de fondo, con información de error completa -
window.onerror
en la página web de alojamiento también puede ver el error arrojado por un script de contenido de extensión (pero el error tampoco contiene ninguna información útil)
Reproducción de window.onerror reventado para script de contenido de extensión de Chrome.
En una nueva carpeta, cree manifest.json
, content-script.js
y background-script.js
. A continuación, cargue en Chrome a través de Ventana> Extensiones> Cargar extensión no empaquetada.
- Para ver la ventana reventada. Información de error para un error de script de contenido, vuelva a cargar una página web y observe la consola devtools
manifest.json
{
"name": "Chrome extension content-script errors test",
"manifest_version": 2,
"version": "0.0.1",
"background": {
"scripts": [ "background-script.js" ]
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}]
}
content-script.js
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log(''Caught content script error'');
console.log(''errorMsg: '' + errorMsg);
console.log(''url: '' + url);
console.log(''lineNumber: '' + column);
console.log(''column: '' + column);
console.log(''errorObj follows:'');
console.log(errorObj);
return true;
};
console.log(''I am a content script, about to throw an error'');
throw new Error(''Is this error caught?'');
background-script.js
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log(''Caught background script error'');
console.log(''errorMsg: '' + errorMsg);
console.log(''url: '' + url);
console.log(''lineNumber: '' + column);
console.log(''column: '' + column);
console.log(''errorObj follows:'');
console.log(errorObj);
return true;
};
//To see nice window.onerror behaviour for background script..
//Uncomment 2 lines below, reload extension, and look at extension console
//console.log(''I am a background script, about to throw an error'');
//throw new Error(''Is this error caught?'');
Cinco meses después de hacer esta pregunta, ahora estoy bastante convencido de que actualmente no existe una forma fácil de capturar / manejar globalmente los errores de Javascript que se producen en un script de contenido. Como tal,
- Creé un informe de error de Chrome: window.onerror debería contener información útil para el error generado en el script de contenido de extensión . No dude en participar con comentarios útiles.
- Si necesita atrapar globalmente los errores de secuencia de comandos de contenido, su mejor opción es asumir window.onerror está reventado por ahora en las secuencias de comandos de contenido. En su lugar, ajuste todo el código JavaScript en los bloques try-catch, lo que le da acceso a información de error útil. Esto es más complicado de lo que parece, ya que tiene que manejar tanto el código síncrono (fácil) como el código de devolución de llamada asincrónica (más complicado). Eche un vistazo a este article para empezar, ¡y buena suerte!
Sé que llegué un poco tarde (hace poco más de un año), pero aún quería obtener una posible respuesta. Hay dos formas principales de hacer esto.
El primer método es un subconjunto de la API chrome.extension
. chrome.extension.lastError
errores y establece el mensaje / resumen en la cadena chrome.extension.lastError.message
. Desafortunadamente, eso es todo lo que puede hacer, puede verificarlo en la documentación del Desarrollador de Chrome .
El segundo método, que utiliza detectores de eventos, es window.addEventListener(''error'', function(e) { ... });
, donde el evento e
tomado por la devolución de llamada almacena la traza del error en e.error.stack
. Esto puede usarse independientemente o en conjunto con el primer método, y puedes leerlo here .
Vea el manejo de errores más completo por script de contenido de extensión de Chrome en https://github.com/barbushin/javascript-errors-notifier/blob/master/content.js - es el código fuente de la extensión JavaScript Notifier Notifier .