Pergunta

Estou querendo registrar exceções de JavaScript não tratadas. Existe um evento que dispara quando uma exceção não é pega? Estou procurando capturar as exceções antes que elas causem erros de JavaScript no navegador, mas prefiro não executar todo o meu aplicativo dentro de uma tentativa/captura. Qualquer ajuda seria apreciada. Obrigado!

ATUALIZAÇÃO: TVANFOSSON apontou o OnError como uma possibilidade. Não faz parte de uma especificação e está disponível apenas nos navegadores baseados em IE ou lagartixas.

Para maiores informações - http://books.google.com/books?id=tkszhx-xkzyc&pg=pa386&lpg=pa386&dq=safari+onerror+javascript&s0aH3HOZ3HAHLOZ3HOZ3HOZ3HOZ3HAHLOZ3HOZ3HAHLOZ3HOZ3HAHLOZ3

Tabela de suporte do OnError - http://www.quirksmode.org/dom/events/error.html

Documentação de Mozilla - https://developer.mozilla.org/en/dom/window.onerror

Relatório de bugs do webkit - https://bugs.webkit.org/show_bug.cgi?id=8519

Foi útil?

Solução

Tente usar um manipulador OnError. Documentos de mdn. Isso permitirá que você faça algo quando um erro for detectado, mas provavelmente não permitirá que você continue de uma maneira graciosa que um bloco de tentativa/captura o faria. Esteja ciente de que, sem dúvida, diferenças entre os navegadores na maneira como isso é tratado.

Outras dicas

Confira este 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... :(");

Quais impressões:

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\

Notas:

  • Se você remover as linhas "retornar verdadeiro" / "evt.preventDefault ()", depois que o erro for registrado, ele será impresso no console JS da maneira normal.

  • Ao contrário das declarações feitas acima, o Window.onerror trabalhou em todos os navegadores que testei. No entanto, o método AddEventListener provavelmente é melhor de qualquer maneira e fornece uma semântica mais rica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top