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'interfaceErrorEvent
est envoyé àwindow
, etwindow.onerror()
est appelé. - Lorsque le chargement d'une ressource (telle que
<img>
ou<script>
) échoue, un événementerror
utilisant l'interfaceEvent
est 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 Standard # event-error |
HTML Standard # handler-onerror |
Compatibilité des navigateurs
BCD tables only load in the browser