J'ai essayé d'utiliser importScripts pour charger un deuxième fichier JavaScript dans mon travailleur Web, mais bien qu'aucune erreur ne se soit produite, cela n'a pas fonctionné. J'ai réduit le problème à cette situation très simple:
Dans le fichier HTML principal:
<script>
var w = new Worker("script1.js");
w.addEventListener("message", function(e){
alert(e.data);
})
w.postMessage();
</script>
Dans script1.js:
self.addEventListener("message", function(e){
var a = 5;
importScripts("script2.js");
self.postMessage(a);
})
Dans script2.js:
a = 6
Je voudrais voir une boîte de dialogue affichant 6, car a est passé de 5 à 6 en important script2.js, mais la boîte de dialogue affiche 5. Que me manque-t-il ici?
En utilisant var a
dans la fonction signifie que a
sera toujours privé. Depuis importScripts ajoute à la portée globale , JS préfère accéder au a
le plus localisé dans la fonction qui publie a
. Vous pouvez publier self.a
à la place, qui sera 6, comme vous vous y attendiez.
EDIT: Quelqu'un m'a récemment posé des questions à ce sujet en personne, j'ai donc fait une démo pour clarifier le comportement: http://pagedemos.com/importscript/