GlobalEventHandlers.onerror

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

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="" et aussi comme objet évènement lors de l'envoi d'un Event à window, auquel cas les autres arguments ne seront pas fournis (au contraire de ErrorEvent, qui amène le passage de l'ensemble complet des arguments à window.onerror, tandis que seul l'objet d'évènement d'erreur est  passé aux gestionnaires de window.addEventListener('error'))
  • 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'))

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 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.

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 eventsourcelinenocolnoerror. Dans les navigteurs qui n'ont pas implémenté cette obligation, ils peuvent toujours être obtenus via arguments[0] à arguments[2].

Spécifications

Spécification Statut Commentaire
WHATWG HTML Living Standard
La définition de 'onerror' dans cette spécification.
Standard évolutif  

Compatibilité des navigateurs

Avant Firefox 14, quand le chargement d'un <script> échouait, window.onerror était invoqué avec le message "Error loading script". Ce bug a été corrigé dans bug 737087. A présent, scriptElement.onerror est invoqué à la place dans de tels cas.

Depuis Firefox 31, les 2 derniers arguments (colno et error) ont été ajoutés, ce qui signifie que vous pouvez accéder à la trace de la pile d'une erreur de script via l'objet Error fourni(bug 355430).

Voir aussi

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support de base (Oui) ? ? ? ?
Fonctionnalité Android Android Webview Chrome pour Android Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile
Support de base ? ? ? ? ? ? ? ?

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : NemoNobobyPersonne, Hell_Carlito, FGM, miam
 Dernière mise à jour par : NemoNobobyPersonne,