Problème JavaScript asynchrone
Archive du forum. Utilisation du modèle de script pour JavaScript asynchrone sur xul.fr.
Forum
20-05-2010 10:41:14
Tibo
Bonjour,
Je m'intéresse de prêt à l'appel de script de type JavaScript asynchrone.
Le code d'Analytics étant quelque peu illisible ^^, j'ai cru trouver avec bonheur votre explication sur ce système.
Or, il se trouve que vous avez les mêmes problèmes que moi, à savoir que sous Firefox, la page où se situe le script d'appel se "déplace" dans la navigation de Firefox (3.6) sous la même url mais non plus avec le protocole HTTP mais wyciwyg:// et laisse apparaître apparemment l'adresse de la page dans le cache du navigateur Firefox. Et le navigateur semble toujours attendre une réponse de la part du script...
Avez-vous eu le même problème ? Ou ai-je fais une erreur ? J'ai bien recopié tout votre script exemple, caractère par caractère. D'ailleurs, votre démo elle-même me donne le même problème :/
Merci d'avance pour vos lumières,
Tibo
20-05-2010 20:17:17
webmaster
Bonjour
Pour l'instant, j'en suis là:
- Sous Chrome la démo fonctionne parfaitement (JavaScript asynchrone est une idée de Google, c'est donc normal).
- Sous Firefox cela fonctionne mais le script semble continuer à tourner bien que le message "Arrêté" s'affiche dans la barre d'état.
- Sous IE8 cela ne semble pas fonctionner.
Je vais revoir le script, donc.
Pour le "déplacement de l'URL", je ne vois pas, cela se manifeste comment, concrètement?
21-05-2010 09:23:01
Tibo
Oui, pas facile à comprendre je sais, moi même je n'ai pas trouvé de suite.
En fait, quand vous chargez la page de la démo, regardez l'historique de navigation qui se trouve à côté des boutons "Avancer / Reculer d'une page", pas l'historique du menu. Vous verrez alors que vous vous trouvez non plus sur une page avec HTTP, mais wyciwyg:// puis la vraie url de la page de démo.
Et d'après mes recherches, cela indique le cache de Firefox.
J'ai bien essayé de décrypter le code de google mais je dois pas avoir le niveau ou la patience pour voir exactement comment ils font. Je pense à une variable de retour ou autre dans une fonction qu'on a pas dans la démo.
Tibo
21-05-2010 19:15:26
webmaster
J'ai étudié le script et il ne fonctionne plus dans les dernières versions des navigateurs.
L'essentiel est ici (ce que fait le script async.js dépend de l'application):
<script type="text/javascript"> var demo = demo || []; demo.push(['myfunc'], ['12345']); demo.push(['func2'], ['hello']); </script> <script type="text/javascript"> (function() { var myscript = document.createElement('script'); myscript.src = 'async.js'; myscript.setAttribute('async', 'true'); document.documentElement.firstChild.appendChild(myscript); })(); </script>Le problème est dans la dernière ligne: document.documentElement.firstChild.appendChild(myscript); Il faut trouver un autre moyen d'ajouter le code JavaScript dans la page. Je verrai demain.
22-05-2010 11:10:59
Tibo
Ok, je vais chercher également de mon côté. Petit à petit, on va trouver :)
22-05-2010 16:08:01
webmaster
Problème résolu.
La démo a été mise à jour, et plus spécialement le code JavaScript qui est chargé de façon asynchrone dans la page.
Télécharger la démo.
Le code asynchrone fonctionne parfaitement, c'est le document.write qui posait problème: il n'ajoute pas du texte à la page, il le remplace.
J'utilise donc pour la démonstration une zone de stockage dans la page dans laquelle on ajoute un contenu par la commande xxxx.innerHTML += "".
Cela était en fait totalement indépendant du script asynchrone, c'est propre à l'exemple.
01-07-2010 16:25:08
Thibaut
Désolé pour le retard mais la méthode fonctionne parfaitement maintenant !
Merci ;)
Thibaut
© 2010-2013 Xul.fr