2010-05-30 12 views
1

Mon site Web intègre dynamiquement un fichier Javascript externe dans la balise principale. Le Javascript externe définit une variable globale myString = "data". A quel moment myString devient-il accessible à Javascript sur le site?Comment et quand les navigateurs implémentent-ils des modifications en temps réel au DOM d'un document?

<html> 
<head> 
    <script type="text/javascript"> 
     myString = null; 
     external = document.createElement("script"); 
     //externalScript.js is one line, containing the following: 
     //myString = "data"; 
     external.setAttribute("src", "externalScript.js"); 
     external.setAttribute("type", "text/javascript"); 
     document.getElementsByTagName("head")[0].append(external); 
     alert(myString); 
    <script> 
</head> 
<body> 
</body> 
</html> 

Ce code avertit null (quand je pensais qu'il alerterait « données ») dans Chrome et IE, même si le DOM a chargé dans externalScript.js à ce stade. Quand externalScript.js est-il évalué par le navigateur et à quel moment ai-je accès à la nouvelle valeur de myString?

Répondre

4

Vous pouvez y accéder lorsque le pour cet élément de script événement se déclenche onload, comme celui-ci:

external = document.createElement("script"); 
external.onload = function() { alert(myString); }; 
script.onreadystatechange= function() { //for IE, the special kid... 
    if (this.readyState == 'complete') alert(myString); 
} 
external.setAttribute("src", "externalScript.js"); 
external.setAttribute("type", "text/javascript"); 
document.getElementsByTagName("head")[0].appendChild(external); 

Cette juste attache une fonction à exécuter une fois le script chargé, exécuter un code qui dépend du script Là. Correction à la réponse précédente: comme seanmonstar souligne dans les commentaires (merci!), Vous avez en effet besoin d'une exception IE ici encore, parce que c'est un peu "spécial" ...

+0

Oh, j'aime beaucoup mieux. Réponse supprimée. Est-ce que l'injection du script externe fonctionnera même si nous agissons à l'intérieur de ''? Je n'en ai pas traité beaucoup ... – Matchu

+0

@Matchu - Ça devrait marcher, tant que l'élément a été ouvert ça marchera ... les navigateurs je suppose * que ce genre de chose arrive. Lorsqu'un élément est ouvert, la plupart des implémentations de navigateur le traitent comme un élément fermé, ajoutant les enfants dans ce parent comme il les trouve, mais le parent lui-même est juste jeu dès qu'il est ouvert. –

+0

Je pense que j'ai eu des problèmes avec les scripts à la fin de '' être en mesure d'ajouter des choses ... le temps de tester! – Matchu