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.

Un gestionnaire d'événement 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.

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

Voir aussi