En una extensión de Chrome, ¿hay alguna manera de atrapar/manejar globalmente los errores de Javascript que ocurren en un script de contenido? (por ejemplo, para el envío a un servicio de seguimiento de errores de Javascript como bugsnag)
Idealmente, configuraría un controlador 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 proporcionada es inútil: un mensaje de 'Error de secuencia de comandos' y ninguna URL, número de línea, columna o objeto de error con la pila.
Creé una extensión de prueba para mostrar este comportamiento defectuoso para los scripts de contenido. Detalles abajo. Hallazgos interesantes:
window.onerror funciona correctamente en un script de fondo, con información completa del errorwindow.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 información útil) En una carpeta nueva, cree manifest.json , content-script.js y background-script.js . Luego cárguelo en Chrome a través de Ventana> Extensiones> Cargar extensión desempaquetada.
{ "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"] }] } 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?'); 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?');5 meses después de hacer esta pregunta, ahora estoy bastante convencido de que actualmente no hay una manera fácil de atrapar/manejar los errores de Javascript que ocurren en un script de contenido. Como tal,
Vea el manejo de errores más completo mediante el script de contenido de la 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 Errors Notifier .