Domanda

Sto cercando di registrare eccezioni javascript non gestite. Esiste un evento che viene generato quando non viene rilevata un'eccezione? Sto cercando di catturare le eccezioni prima che causino errori javascript nel browser, ma preferirei non eseguire la mia intera applicazione all'interno di un try / catch. Qualsiasi aiuto sarebbe apprezzato. Grazie!

Aggiornamento: tvanfosson ha indicato onerror come una possibilità. Non fa parte di una specifica ed è disponibile solo nei browser basati su IE o Gecko.

Per ulteriori informazioni - http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig= iBCtOQs0aH_EAzSbWlGa9v5flyo # PPA387, M1

Tabella di supporto OnError - http://www.quirksmode.org/dom/events/ error.html

Documentazione di Mozilla - https://developer.mozilla.org/en/DOM/window .onerror

Segnalazione bug WebKit - https://bugs.webkit.org/show_bug.cgi? id = 8519

È stato utile?

Soluzione

Prova a usare un gestore onerror. Docs da MDN. Ciò ti consentirà di fare qualcosa quando viene rilevato un errore, ma probabilmente non ti consentirà di continuare in modo grazioso come farebbe un blocco try / catch. Tieni presente che ci sono indubbiamente differenze tra i browser nel modo in cui viene gestito.

Altri suggerimenti

Dai un'occhiata a questo violino:

http://jsfiddle.net/xYsRA/1/

window.onerror = function (msg, url, line) {
    console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
    return true; // same as preventDefault
};

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
    evt.preventDefault();
});


throw new Error("Hewwo world.  I crash you!!!");

throw new Error("Hewwo world.  I can only crash you once... :(");

Quale stampa:

Caught[via window.onerror]: 'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21
Caught[via 'error' event]:  'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26
ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world.  I crash you!!!", clipboardData: undefined, cancelBubble: false…}
 fiddle.jshell.net:27\

Note:

  • Se rimuovi " return true " / " evt.preventDefault () " righe, quindi dopo aver registrato l'errore, verrà stampato sulla console JS in modo normale.

  • Contrariamente alle affermazioni fatte sopra, window.onerror ha funzionato in tutti i browser che ho testato. Tuttavia, il metodo addEventListener è probabilmente comunque migliore e fornisce una semantica più ricca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top