GlobalEventHandlers.onerror
===========================

Un gestionnaire d'événement (en-US) pour l'événement `error`. Des événements d'erreur sont déclenchés vers diverses cibles et pour différents types d'erreurs:

* Lorsqu'une **erreur de runtime JavaScript** se produit (erreurs de syntaxe comprises), un évènement `error` utilisant l'interface `ErrorEvent` est envoyé à `window`, et `window.onerror()` est appelé.
* Lorsque le **chargement d'une ressource** (telle que `<img>` ou `<script>`) **échoue**, un événement `error` utilisant l'interface `Event` est déclenché sur l'élément qui a initié le chargement, et le gestionnaire `onerror()` de l'élément est invoqué. Ces évènements d'erreur ne remontent pas à window, mais (au moins dans FireFox) ils peuvent être gérés par une unique capture `window.addEventListener` (en-US).
Syntaxe
-------

Pour des raisons historiques, des arguments différents sont passés aux gestionnaires `window.onerror` et `element.onerror`.

### window.onerror


```js
window.onerror = function(messageOrEvent, source, noligne, nocolonne, erreur) { ... }
```


Paramètres de la fonction :

* `message` : message d'erreur (chaîne ou objet évènement). Disponible comme `event` (sic !) dans le gestionnaire de HTML `onerror=""`.
* source : l'URL du script où l'erreur a été déclenchée (chaîne)
* noligne : le numéro de ligne où l'erreur a été déclenchée (nombre)
* nocolonne : le numéro de colonne où l'erreur a été déclenchée (nombre)
* erreur : un Error Object (objet)
### element.onerror (et `window.addEventListener('error')`)


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


`element.onerror` accepte une fonction avec un argument unique de type `Event`.

Notes
-----

Quand une erreur de syntaxe\*\*(?)\*\* se produit dans un script chargé à partir d'une origine différente, les détails de l'erreur de syntaxe ne sont pas rapportés, afin de prévenir la fuite d'information (voir bug Firefox 363897). A la place, l'erreur est simplement reportée en tant que **`"Script error"`**. Ce comportement peut être surchargé par certains navigateurs en utilisant l'attribut `crossorigin` de `<script>` et en faisant en sorte que le serveur envoie les entêtes de réponse CORS HTTP appropriés. Un contournement consiste à isoler "Script error" et à la gérer en sachant que les détails de l'erreur ne sont visibles que la console du navigateur et non accessibles en JavaScript.


```js
window.onerror = function (msg, url, noLigne, noColonne, erreur) {
  var chaine = msg.toLowerCase();
  var souschaine = "script error";
  if (chaine.indexOf(souschaine) > -1) {
    alert("Script Error : voir la Console du Navigateur pour les Détails");
  } else {
    var message = [
      "Message : " + msg,
      "URL : " + url,
      "Ligne : " + noLigne,
      "Colonne : " + noColonne,
      "Objet Error : " + JSON.stringify(erreur),
    ].join(" - ");

    alert(message);
  }

  return false;
};
```


Lors de l'utilisation du balisage html intégré (<body onerror="alert('une erreur est survenue')>...), la spécification HTML requiert que les arguments passés à `onerror` soient nommés `event`, `source`, `lineno`, `colno`, `error`. Dans les navigteurs qui n'ont pas implémenté cette obligation, ils peuvent toujours être obtenus via `arguments[0]` à `arguments[2]`.

Spécifications
--------------

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

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Capture and report JavaScript errors with window.onerror (blog.getsentry.com, 2016)
* How to catch JavaScript Errors with window.onerror (even on Chrome and Firefox) (danlimerick.wordpress.com, 2014)