Éléments de script et exécution d’événements

Le mode Normes IE9 introduit l’événement normalisé et interopérable load pour les éléments script. Les versions antérieures de Windows Internet Explorer ne prenaient en charge que l’événement non interopérable onreadystatechange pour les éléments script.

Pour que la compatibilité soit assurée avec les sites Web existants, l’événement onreadystatechange demeure pris en charge en mode IE 9. Toutefois, les sites qui s’inscrivent à ces deux événements disposent désormais de deux rappels, contre un seul dans les versions antérieures d’Internet Explorer.

En règle générale, ces événements permettent de différer l’exécution de fonctionnalités pour ne pas bloquer le chargement des pages. Dans ces situations, l’absence de détection de fonctionnalité (inscription à onreadystatechange et à load) peut aboutir à une double exécution du rappel. Cela se traduit généralement par des erreurs de script ou par une altération des fonctionnalités des pages.

L’événement load normalisé est l’événement recommandé pour ces scénarios et doit être utilisé chaque fois que cela est possible. Les développeurs Web doivent utiliser la détection de fonctionnalité pour détecter les navigateurs qui prennent en charge l’événement load pour les éléments script. Dans les versions héritées d’Internet Explorer, le script doit recourir à une fonction de rappel permettant d’utiliser onreadystatechange.

L’exemple de code suivant montre un modèle de codage incorrect.

s = document.createElement("script");
s.src="readystate.js";
s.onreadystatechange = callback; //Legacy IE
s.onload = callback; //Other browsers
document.body.appendChild(s);
function callback() { console.log("loaded"); }

L’exemple de code suivant montre le modèle de codage recommandé.

s = document.createElement("script");
s.src="myscript.js";
if(s.addEventListener) {
  s.addEventListener("load",callback,false);
} 
else if(s.readyState) {
  s.onreadystatechange = callback;
}
document.body.appendChild(s);
function callback() { console.log("loaded"); }

Rubriques connexes

 

 

Afficher:
© 2015 Microsoft