tab script matches make info how extensions extension example chrome javascript google-chrome google-chrome-extension

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:

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!

Eche un vistazo a TraceKit , eso es lo que usamos en nuestra empresa para hacer todos los TraceKit sesión de registro de errores. Si lo combina con una biblioteca de cliente de JavaScript para su servicio de registro favorito, ya está todo listo.


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 .