2012-09-24 27 views
60

Estoy tratando de encontrar o encontrar una forma de mostrar en un recuadro de alerta todas las excepciones javascript no controladas en una aplicación. Quisiera que todo esto se hiciera en el lado del cliente, sin usar ningún código del lado del servidor. Estoy usando MVC3 como entorno.Captura de todas las excepciones no controladas de Javascript

He estado investigando durante los últimos días y no he encontrado exactamente lo que estoy buscando.

Encontré 2 maneras a continuación que parecen que son casi lo que estoy buscando, excepto que estas formas están configuradas para que tenga que pasar un nombre de función en un método personalizado para imprimir la traza de todos los no controlados excepciones dentro de esa función específica. Estoy buscando una manera de no tener que pasar manualmente el nombre de una función a un método personalizado que imprima el seguimiento de la pila de todas las excepciones no controladas. Me gustaría que estos métodos personalizados simplemente 'escucharan' todas las excepciones no controladas dentro de toda la aplicación.

http://eriwen.com/javascript/js-stack-trace/

También algo similar al anterior enlace:

https://github.com/eriwen/javascript-stacktrace

Aquí está el código básico del segundo enlace anterior que imprime el seguimiento de la pila de un determinado función javascript:

instrumentFunction: function (context, functionName, callback) { 
    context = context || window; 
    var original = context[functionName]; 
    context[functionName] = function instrumented() { 
     callback.call(this, printStackTrace().slice(4)); 
     return context[functionName]._instrumented.apply(this, arguments); 
    }; 
    context[functionName]._instrumented = original; 
} 

function printStackTrace(options) { 
    options = options || { 
     guess: true 
    }; 
    var ex = options.e || null, 
     guess = !! options.guess; 
    var p = new printStackTrace.implementation(), 
     result = p.run(ex); 
    return (guess) ? p.guessAnonymousFunctions(result) : result; 
} 

Entonces, para resumir, ¿conocen alguna forma de tener algún tipo de 'escucha' er 'para escuchar todas las excepciones javascript no controladas y luego imprimirlas en la pantalla en un cuadro de alerta?

Gracias! Jason

+0

una cosa ... ¿usarías una casilla de alerta?!? podría usar console.log (error_message) para ... – Mathlight

+1

Creo que _esta pregunta_ ** [Captura todos los errores JS] (http://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and- send-les-a-servidor) ** le ayudará a cabo –

+0

probablemente debería echar un vistazo a esta pregunta: http://stackoverflow.com/questions/205688/javascript-exception-handling – Mark

Respuesta

-1

Revisar http://log4javascript.org se basa en Log4J. Si la mayor parte de su código está envuelto en declaraciones try/catch para manejar excepciones, puede utilizar esta biblioteca como una interfaz común para enviar resultados a un "cuadro de diálogo" o ventana de registro siempre disponible que su usuario final pueda ver. Incluso podría tener un botón que ejecute window.print() para imprimir el contenido del cuadro de diálogo en la impresora o PDF. Buena suerte.

86

Puede hacerlo utilizando el método window.onerror.

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    alert("Error occured: " + errorMsg);//or any message 
    return false; 
} 
+7

Mucho mejor que tratando de envolver toda mi aplicación en un bloque try/catch. :) ¡Gracias! – Anthony

+10

Solo un aviso: "Tenga en cuenta que algunos/muchos eventos de error no desencadenan window.onerror, debe escucharlos específicamente". -https: //developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror – shusson

+5

no es necesario incluir el nombre de la función (myErrorHandler) en ese código ...solo puede ser function (errorMsg, url, lineNumber) – JoelFan

22

Puede utilizar window.onerror, o (sorprendentemente!) Se unen al evento 'error' correctamente:

window.onerror = function (message, file, line, col, error) { 
    alert("Error occured: " + error.message); 
    return false; 
}; 
window.addEventListener("error", function (e) { 
    alert("Error occured: " + e.error.message); 
    return false; 
}) 

Si desea realizar un seguimiento de los errores de JavaScript, puede intentar Atatus. Yo trabajo en Atatus.

Cuestiones relacionadas