incompatibilité onload="fonction()" et <script defer=true/>
Comme je l'ai fait remarquer dans 2 fils, beaucoup d'exemples de l'API sont invalides pour la raison suivante: l'API charge des scripts avec l'attribut defer=true (voir code ci-dessous). Or les exemples sont basés sur du javascript inline qui ne testent pas la disponibilité des scripts déférés, entrainant des erreurs de variables indéfinies.
http://www.websiteoptimization.com/speed/tweak/defer/
Considérons ce code, renvoyé par le chargement de l'API:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// Geoportal API version 1.0beta4()
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'http://api.ign.fr/geoportail/api/js/1.0beta4/Geoportal.js';
script.charset='utf-8';
script.defer= true;
script.onload= script.onreadystatechange= function(){
if(script.readyState && script.readyState != 'loaded' && script.readyState != 'complete'){return;}
script.onload= script.onreadystatechange= null;
if(typeof(initGeoportalMap)=='function'){initGeoportalMap();}else{
var save_callback= function(){};
if(typeof window.onload != 'undefined'){save_callback=window.onload;}
window.onload= function() {
initGeoportalMap();
if(save_callback != 'undefined' && save_callback!=null) {save_callback();}
};
}
};
var head= document.getElementsByTagName('head')[0];
head.appendChild(script); |
On voit que le script est chargé en defer et qu'un certain nombre de précautions sont ajouté pour déférer aussi l'initialisation de la carte.
Mais justement, le code en ligne n'ayant pas ces précautions il arrive trop tôt. Il est vrai que les exemples fonctionnent sur beaucoup de navigateurs, mais c'est de la pure chance et plus le navigateur optimise le temps de réponse plus il risque de tomber dans cette trappe.
Si les scripts sont chargés en local, par exemple, le problème ne se pose pas.
Note: je poste ce fil car dgrichard l'a suggéré au détour d'une réponse:
Citation:
Envoyé par
dgrichard
Serait-il possible de partager ce type de correctif sur le forum (nous n'utilisons pas le webkit, mais il devrait être possible de remonter l'information auw développeurs OpenLayers s'ils ont été confrontés à celà) ?