GlobalEventHandlers.onerror

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Um event handler para o evento error . Eventos de erro são disparados contra diversos tipos de alvos, para diferentes tipos de erros:

  • Quando um erro de execução (runtime error) de JavaScript (incluindo erros de sintaxe) ocorrem, um evento error usando a interface ErrorEvent é disparado no window e window.onerror() é invocado.
  • Quando um recurso (como um <img> ou <script>) falha na inicialização, um evento error usando a interface Event é disparado no elemento , que inicializa o load e o onerror() handler do elemento é invocado. Esse evento de erro emergem para a janela, mas (pelo menos no Firefox) pode ser manipulado com uma captura única window.addEventListener.

Instalando um manipulador de eventos de erro global é útil para compilação automatizada de relatórios de erro.

Sintaxe

Por questões históricas, diferentes argumentos são passados para os manipuladores window.onerror e element.onerror;

window.onerror

js
window.onerror = function(message, source, lineno, colno, error) { ... }

Parâmetros da função:

  • message: mensagem de erro (string). Disponível como event (sic!) no manipulador HTML onerror="" .
  • source: URL do script onde o erro foi disparado(string)
  • lineno: Número da linha onde o evento foi disparado (number)
  • colno: Número da coluna para a linha onde o evento ocorreu (number)
  • error: Error Object (object)

Quando a função retorna verdadeira, ela evita o disparo do manipulador de evento padrão

element.onerror

js
element.onerror = function(event) { ... }

element.onerror aceita uma função dom um único argumento do tipo Event.

Notas

Quando um erro de sintaxe**(?)** ocorre em um script, carregado de uma origem diferente, os detalhes do erro de sintaxe não são reportados para previnir vazamento de informações (veja Erro do Firefox 363897). Ao invés de exibir simplesmente "Script error." (erro de script), este comportamento pode ser sobrescrito em alguns navegadores usando o atributo crossorigin no <script> e tendo o servidor enviado os cabeçalhos HTTP CORS apropriados. Uma solução alternativa é isolar o "Script error." e manipulá-lo sabendo que o detalhe do erro é visível somente no console do navegador e não acessível através do JavaScript.

js
window.onerror = function (msg, url, lineNo, columnNo, error) {
  var string = msg.toLowerCase();
  var substring = "script error";
  if (string.indexOf(substring) > -1) {
    alert("Script Error: See Browser Console for Detail");
  } else {
    alert(msg, url, lineNo, columnNo, error);
  }
  return false;
};

Quando usamos a marcação HTML inline (<body onerror="alert('an error occurred')">), a especificação HTML requer argumentos passados para o onerror identificados como event, source, lineno, colno, error. Os navegadors que não implementam este requerimento, podem ainda serem obtidos por arguments[0] até arguments[2].

Especificações

Specification
HTML Standard
# event-error
HTML Standard
# handler-onerror

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também