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: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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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:
Partager