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 (en-US).

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
HTML Living Standard
La définition de 'onerror' dans cette spécification.
Standard évolutif  

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi