1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
---
title: GlobalEventHandlers.onerror
slug: Web/API/GlobalEventHandlers/onerror
tags:
- API
- HTML DOM
- Propriedade
- Referencia
translation_of: Web/API/GlobalEventHandlers/onerror
---
<div>{{ApiRef("HTML DOM")}}</div>
<p>Um <a href="/en-US/docs/Web/Guide/Events/Event_handlers">event handler</a> para o evento <code><a href="/en-US/docs/Web/Events/error">error</a></code> . Eventos de erro são disparados contra diversos tipos de alvos, para diferentes tipos de erros: </p>
<ul>
<li>Quando um <strong>erro de execução (runtime error) de JavaScript</strong> (incluindo erros de sintaxe) ocorrem, um evento <code><a href="/en-US/docs/Web/Events/error">error</a></code> usando a interface {{domxref("ErrorEvent")}} é disparado no {{domxref("window")}} e <code>window.onerror()</code> é invocado.</li>
<li>Quando um recurso (como um {{HTMLElement("img")}} ou {{HTMLElement("script")}}) <strong>falha na inicialização</strong>, um evento <code><a href="/en-US/docs/Web/Events/error">error</a></code> usando a interface {{domxref("Event")}} é disparado no elemento , que inicializa o load e o <code>onerror()</code> handler do elemento é invocado. Esse evento de erro emergem para a janela, mas (pelo menos no Firefox) pode ser manipulado com uma captura única {{domxref("window.addEventListener")}}.</li>
</ul>
<p>Instalando um manipulador de eventos de erro global é útil para compilação automatizada de relatórios de erro. </p>
<h2 id="Sintaxe">Sintaxe</h2>
<p>Por questões históricas, diferentes argumentos são passados para os manipuladores window.onerror e element.onerror;</p>
<h3 id="window.onerror">window.onerror</h3>
<pre class="brush: js">window.onerror = function(message, source, lineno, colno, error) { ... }
</pre>
<p>Parâmetros da função:</p>
<ul>
<li><code>message</code>: mensagem de erro (string). Disponível como <code>event</code> (sic!) no manipulador HTML <code>onerror=""</code> .</li>
<li><code>source</code>: URL do script onde o erro foi disparado(string)</li>
<li><code>lineno</code>: Número da linha onde o evento foi disparado (number)</li>
<li><code>colno</code>: Número da coluna para a linha onde o evento ocorreu (number) {{gecko_minversion_inline("31.0")}}</li>
<li><code>error</code>: <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error Object</a> (object) {{gecko_minversion_inline("31.0")}}</li>
</ul>
<p> </p>
<p>Quando a função retorna verdadeira, ela evita o disparo do manipulador de evento padrão </p>
<h3 id="element.onerror">element.onerror</h3>
<pre class="brush: js">element.onerror = function(event) { ... }
</pre>
<p><code>element.onerror</code> aceita uma função dom um único argumento do tipo {{domxref("Event")}}.</p>
<h2 id="Notas">Notas</h2>
<p>Quando um erro de sintaxe<strong>(?)</strong> ocorre em um script, carregado de uma <a href="/en-US/docs/Web/Security/Same-origin_policy">origem diferente</a>, os detalhes do erro de sintaxe não são reportados para previnir vazamento de informações (veja {{bug("363897")}}). Ao invés de exibir simplesmente <code><strong>"Script error." (erro de script)</strong></code>, este comportamento pode ser sobrescrito em alguns navegadores usando o atributo <code>{{htmlattrxref("crossorigin","script")}}</code> no {{HTMLElement("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.</p>
<pre class="brush: 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;
};</pre>
<p>Quando usamos a marcação HTML inline (<code><body onerror="alert('an error occurred')"></code>), a especificação HTML requer argumentos passados para o <code>onerror</code> identificados como <code>event</code>, <code>source</code>, <code>lineno</code>, <code>colno</code>, <code>error</code>. Os navegadors que não implementam este requerimento, podem ainda serem obtidos por <code>arguments[0]</code> até <code>arguments[2]</code>.</p>
<h2 id="Especificações">Especificações</h2>
<table class="spectable standard-table">
<tbody>
<tr>
<th scope="col">Especificação</th>
<th scope="col">Status</th>
<th scope="col">Comentário</th>
</tr>
<tr>
<td>{{SpecName('HTML WHATWG','webappapis.html#handler-onerror','onerror')}}</td>
<td>{{Spec2('HTML WHATWG')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Compatibilidade_de_navegadores">Compatibilidade de navegadores</h2>
<p>Antes do Firefox 14, quando um {{HTMLElement("script")}} falhava na inicialização, <code>window.onerror</code> era invocada com a mensagem <strong>"Error loading script"(erro de leitura de script)</strong>. Isto foi corrigido no {{bug("737087")}}, agora <code>scriptElement.onerror</code> é chamado ao invés disto.</p>
<p>Desde o Firefox 31, os últimos 2 argumentos (<code>colno</code> and <code>error</code>) foram adicionados, o que significa que você tem acesso a pilha de rastreamento de um erro de script através do <code>window.onerror</code> por intermédio do <code>Error</code> object ({{bug("355430")}}.)</p>
<h2 id="Veja_também">Veja também</h2>
<ul>
<li><a href="http://blog.getsentry.com/2016/01/04/client-javascript-reporting-window-onerror.html">Capture e reporte erros JavaScript com window.onerror (blog.getsentry.com, 2016)</a></li>
<li><a href="https://danlimerick.wordpress.com/2014/01/18/how-to-catch-javascript-errors-with-window-onerror-even-on-chrome-and-firefox/">Como capturar erros JavaScript com window.onerror (mesmo no Chrome ou Firefox) (danlimerick.wordpress.com, 2014)</a></li>
</ul>
|