Eu gostaria de pegar todos os erros de função indefinidos lançados. Existe um recurso global de tratamento de erros em JavaScript? O caso de uso está capturando chamadas de função do flash que não estão definidas.
javascript
dom-events
Brian Tompsett - 汤 莱恩
fonte
fonte
Respostas:
Isso ajuda você a:
Não tenho certeza de como ele lida com erros do Flash ...
Atualização: não funciona no Opera, mas estou hackeando o Dragonfly agora para ver o que acontece. A sugestão sobre hackers Dragonfly veio desta pergunta:
Imitar janela. onerror no Opera usando javascript
fonte
window.onerror = function() { alert(42) };
agora o código na resposta:window.onerror = function() { alert("Error caught"); };
não anulado, eu ainda não tenho certeza ..Como capturar erros de Javascript não manipulados
Atribua o
window.onerror
evento a um manipulador de eventos como:Conforme comentado no código, se o valor de retorno
window.onerror
for fortrue
, o navegador deverá suprimir a exibição de uma caixa de diálogo de alerta.Quando o evento window.onerror é acionado?
Em poucas palavras, o evento é gerado quando 1.) há uma exceção não capturada ou 2.) ocorre um erro no tempo de compilação.
Navegadores que suportam window.onerror
Captura de tela:
Exemplo do código onerror acima em ação depois de adicioná-lo a uma página de teste:
Exemplo para Relatório de Erros AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Referências:
fonte
throw
é feita manualmente. stackoverflow.com/questions/15036165/…tratamento sofisticado de erros
Se o tratamento de erros for muito sofisticado e, portanto, puder gerar um erro, é útil adicionar um sinalizador indicando se você já está no "errorHandling-Mode". Igual a:
Caso contrário, você poderá se encontrar em um loop infinito.
fonte
handleError
método.Experimente o Atatus, que fornece rastreamento avançado de erros e monitoramento real de usuários para aplicativos da web modernos.
Deixe-me explicar como obter rastreamentos de pilha razoavelmente completos em todos os navegadores.
Tratamento de erros em JavaScript
O Chrome e o Opera modernos são totalmente compatíveis com as especificações de rascunho do HTML 5 para ErrorEvent e
window.onerror
. Nos dois navegadores, você pode usarwindow.onerror
ou vincular o evento 'error' corretamente:Infelizmente, o Firefox, o Safari e o IE ainda estão por aí e também precisamos apoiá-los. Como o stacktrace não está disponível
window.onerror
, precisamos trabalhar um pouco mais.Acontece que a única coisa que podemos fazer para obter rastreamentos de pilha de erros é agrupar todo o nosso código em um
try{ }catch(e){ }
bloco e depois examinare.stack
. Podemos tornar o processo um pouco mais fácil com uma função chamada wrap que pega uma função e retorna uma nova função com boa manipulação de erros.Isso funciona. Qualquer função que você agrupar manualmente terá um bom tratamento de erros, mas na verdade podemos fazer isso automaticamente na maioria dos casos.
Alterando a definição global de
addEventListener
para que ele agrupe automaticamente o retorno de chamada, podemos inserir automaticamente atry{ }catch(e){ }
maioria dos códigos. Isso permite que o código existente continue a funcionar, mas adiciona o rastreamento de exceções de alta qualidade.Também precisamos garantir que isso
removeEventListener
continue funcionando. No momento, não será porque o argumento paraaddEventListener
foi alterado. Novamente, só precisamos consertar isso noprototype
objeto:Transmitir dados de erro para o seu back-end
Você pode enviar dados de erro usando a tag de imagem da seguinte maneira
Isenção de responsabilidade: Sou desenvolvedor da Web em https://www.atatus.com/ .
fonte
http://yourserver.com
) para receber e armazenar. Se você escolher atatus.com , não precisará fazer nada. Basta incluir duas linhas de script em sua página.Parece que
window.onerror
não fornece acesso a todos os erros possíveis. Ignora especificamente:<img>
erros de carregamento (resposta> = 400).<script>
erros de carregamento (resposta> = 400).window.onerror
maneira desconhecida (jquery, angular etc.).Aqui está o início de um script que captura muitos desses erros, para que você possa adicionar uma depuração mais robusta ao seu aplicativo durante o desenvolvimento.
Pode ser usado assim:
O script completo possui uma implementação padrão que tenta imprimir uma versão "display" semi-legível da entidade / erro que ele recebe. Pode ser usado como inspiração para um manipulador de erros específico do aplicativo. A implementação padrão também mantém uma referência às 100 últimas entidades de erro, para que você possa inspecioná-las no console da Web após elas ocorrerem como:
Nota: Isso funciona substituindo métodos em vários navegadores / construtores nativos. Isso pode ter efeitos colaterais não intencionais. No entanto, tem sido útil usá-lo durante o desenvolvimento, descobrir onde os erros estão ocorrendo, enviar logs para serviços como NewRelic ou Sentry durante o desenvolvimento para que possamos medir erros durante o desenvolvimento e na preparação para que possamos depurar o que está acontecendo em um nível mais profundo. Em seguida, ele pode ser desativado na produção.
Espero que isto ajude.
fonte
fonte
Deve-se preservar também o retorno de chamada onerror associado anteriormente
fonte
Se você deseja uma maneira unificada de lidar com erros não capturados e rejeições de promessa não tratadas, consulte a biblioteca não capturada .
EDITAR
Ouve janela. rejeição não tratada além de window.onerror.
fonte
Eu recomendaria experimentar o Trackjs .
É log de erro como um serviço.
É incrivelmente simples de configurar. Basta adicionar uma linha <script> a cada página e pronto. Isso também significa que será incrivelmente simples de remover se você decidir que não gosta.
Existem outros serviços como o Sentry (que é de código aberto se você pode hospedar seu próprio servidor), mas não faz o que o Trackjs faz. O Trackjs registra a interação do usuário entre o navegador e o servidor da web, para que você possa rastrear as etapas do usuário que levaram ao erro, em vez de apenas uma referência de arquivo e número de linha (e talvez rastreamento de pilha).
fonte
Você ouve o evento onerror atribuindo uma função a window.onerror:
fonte