Window : méthode reportError()
La méthode reportError() de l'interface Window peut être utilisée pour signaler des erreurs à la console ou aux gestionnaires d'évènements des portées globales, en simulant une exception JavaScript non interceptée.
Cette fonctionnalité est principalement destinée aux bibliothèques personnalisées de distribution d'évènements ou de manipulation de fonctions de rappels. Les bibliothèques peuvent utiliser cette fonctionnalité pour intercepter les erreurs dans le code de rappel et les relancer vers le gestionnaire de niveau supérieur. Cela garantit qu'une exception dans un rappel ne empêchera pas les autres d'être traités, tout en garantissant que les informations de trace de pile sont toujours facilement disponibles pour le débogage au niveau supérieur.
Syntaxe
reportError(throwable)
Paramètres
Valeur de retour
Aucune (undefined).
Exceptions
TypeError-
La méthode est appelée sans argument d'erreur.
Exemples
>Détection de fonctionnalité
Test de la méthode en utilisant :
if (typeof window.reportError === "function") {
// la fonction est définie
}
Télémétrie
reportError() permet de signaler des erreurs asynchrones de la même manière que les erreurs intégrées. Regrouper toutes les erreurs en un seul point facilite la collecte de télémétrie sur les erreurs survenant dans une application.
Par exemple, une application web peut configurer un écouteur d'évènements global error pour collecter toutes les erreurs non interceptées et les envoyer à un serveur pour analyse, par exemple en utilisant Sentry (angl.) :
window.addEventListener("error", (event) => {
event.preventDefault(); // Empêche l'enregistrement par défaut dans la console
Sentry.captureException(event.error);
console.error("Erreur rencontrée :", event.error);
showToastNotification(
"Une erreur est survenue. Notre équipe a été informée.",
);
});
Par défaut, cet écouteur peut écouter les exceptions non interceptées lancées lors de l'exécution synchrone de <script>, des rappels setTimeout, des gestionnaires d'évènements, des rappels de promesses asynchrones, etc. Les bibliothèques et les applications peuvent utiliser reportError() pour transmettre leurs propres erreurs à ce même écouteur, garantissant que toutes les erreurs sont capturées de manière cohérente.
function fetchUser(userId) {
return fetch(`/api/users?id=${encodeURIComponent(userId)}`)
.then((response) => {
if (!response.ok) {
throw new Error(
`Échec de la récupération de l'utilisateur avec l'ID ${userId}`,
);
}
return response.json();
})
.catch((error) => {
// Signaler l'erreur au gestionnaire d'erreurs global
window.reportError(error);
});
}
En utilisant reportError() au lieu de laisser l'erreur non interceptée, l'exécution du code suivant n'est pas interrompue, tout en garantissant que l'erreur est enregistrée et peut être analysée. Par exemple, cette fonction peut être appelée dans un exécuteur de tests sans gestion supplémentaire avec try…catch.
Spécifications
| Specification |
|---|
| HTML> # runtime-script-errors> |
Compatibilité des navigateurs
Voir aussi
- L'interface
Window - La méthode
WorkerGlobalScope.reportError() - L'interface
Window: l'évènementerror - L'interface
WorkerGlobalScope: l'évènementerror - L'interface
HTMLElement: l'évènementerror