Estoy tratando de encontrar o descubrir una manera de mostrar en un cuadro de alerta a todos los de la no controlada javascript excepciones en una aplicación. Me gustaría que todo esto sea hecho en el lado del cliente, sin el uso de cualquier lado del servidor de código. Estoy usando MVC3 como un entorno.

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

He encontrado 2 maneras de abajo que parece que estamos casi en lo que yo estoy buscando, excepto estas formas están configurados de modo que usted tiene que pasar el nombre de una función en un método personalizado para imprimir el seguimiento de la pila de todas las excepciones no controladas dentro de una función específica. Estoy buscando una manera de no tener que pasar manualmente un nombre de función a un método personalizado que imprime el seguimiento de la pila de todas las excepciones no controladas. Me gustaría que estos método personalizado para simplemente «escuchar» para todas las excepciones no controladas dentro de toda la aplicación.

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

También es algo similar a la del enlace anterior:

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

Aquí está el código básico a partir del 2º enlace de arriba que imprime el seguimiento de la pila de una determinada función de 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;
}

Así que, para resumir, hacer que todos ustedes saben de alguna manera para tener algún tipo de ‘escucha’ a escuchar por todo el javascript excepciones no controladas y, a continuación, imprimir a la pantalla en un cuadro de alerta?

Gracias!
Jason

InformationsquelleAutor jre247 | 2012-09-24

4 Comentarios

  1. 116

    Usted puede hacer esto mediante el uso de la ventana.onerror método.

    window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
        alert("Error occured: " + errorMsg);//or any message
        return false;
    }
    • Mucho mejor que tratando de envolver mi toda la aplicación en un bloque try/catch. 🙂 Gracias!
    • Sólo una advertencia: «tenga en cuenta que algunos/muchos de los eventos de error no desencadenan la ventana.onerror, tiene que escuchar para ellos específicamente.» –developer.mozilla.org/en-US/docs/Web/API/…
    • no es necesario incluir el nombre de la función (myErrorHandler) en el código… puede ser sólo función (errorMsg, url, lineNumber)
    • es mejor tener el nombre de la función, para propósitos de depuración. El depurador se utilice el nombre de la función, en lugar de mostrar como una función anónima.
    • Esto es impresionante y gracias! estado tratando de depurar un complejo de fotos-zoom script que funciona bien el 100% del tiempo, excepto en el móvil safai donde aleatoriamente falla, y donde no hay una «consola» o «desarrollador» de la ventana para ver qué pasaba. Asegúrese de que tengo mi propio «depuración» de la ventana que me puede encender y apagar con un secreto botón, pero yo no había forma de que globalmente ver todos los errores que yo no había hecho un ‘try/catch en. Esto además me mostró EXACTAMENTE dónde está el problema fue, y el salvado de mi desgarro más el pelo! Ojalá pudiera hasta votar dos veces!
    • has probado el Safari inspector? No es tan buena como la de Chrome y Firefox, pero al menos es algo.
    • Gracias, pero la ventana.onerror método ofrecido ha trabajado bien. Además, me pidió este 7 años atrás 🙂 Desde entonces he descubierto la línea de javascript herramientas de comprobación, que rápidamente se reveló un montón de otros códigos «bombas» esperando a suceder. Problema resuelto.

  2. 44

    Puede utilizar window.onerror, o (mucho!) se unen a la ‘error’ evento correctamente:

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

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

    • cualquier modifcation? por favor, actualice a mí..
    • ¿por qué está usted «return false» declaración?
  3. 19

    Además

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

    También se puede coger todos los errores que se disparó en el interior de una promesa de devolución de llamada (.then()) escuchar para unhandledrejection evento

    window.addEventListener('unhandledrejection', function (e) {
      alert("Error occurred: " + e.reason.message);
    })
    • Es necesario utilizar tanto window.onerror y window.addEventListener("error", o está utilizando uno de ellos suficiente?
    • Usted puede utilizar uno de ellos. Si utiliza window.addEventListener("error", enviar useCapture conjunto para true con el fin de atrapar también elementos de errores que no se propague. developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
  4. 0

    Retirar http://log4javascript.org se basa en Log4J. Si la mayoría de su código está incluido en las instrucciones try/catch para controlar las excepciones que usted puede hacer uso de la biblioteca como una interfaz común para enviar la salida a un siempre disponible «cuadro de diálogo» o una ventana de registro que el usuario final puede ver. Usted podría incluso tener un botón que ejecuta una ventana.print() para imprimir el contenido de la caja de diálogo de la impresora o PDF. La buena suerte.

Dejar respuesta

Please enter your comment!
Please enter your name here