GlobalEventHandlers.onerror
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 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
errorutilisant l'interfaceErrorEventest envoyé àwindow, etwindow.onerror()est appelé. - Lorsque le chargement d'une ressource (telle que
<img>ou<script>) échoue, un événementerrorutilisant l'interfaceEventest déclenché sur l'élément qui a initié le chargement, et le gestionnaireonerror()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 capturewindow.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 commeevent(sic !) dans le gestionnaire de HTMLonerror="".- 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 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.
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> # event-error> |
| HTML> # handler-onerror> |
Compatibilité des navigateurs
Chargement…