2013-04-30 9 views
23

Próbowałem użyć importScripts do załadowania drugiego pliku JavaScript do mojego web-pracownika, ale chociaż nie wystąpił błąd, to nie zadziałało. I zawężony problemu w dół do tej bardzo prostej sytuacji:importScripts (pracownicy WWW)

W głównym pliku HTML:

<script> 
var w = new Worker("script1.js"); 
w.addEventListener("message", function(e){ 
    alert(e.data); 
}) 
w.postMessage(); 
</script> 

W script1.js:

self.addEventListener("message", function(e){ 
    var a = 5; 
    importScripts("script2.js"); 
    self.postMessage(a); 
}) 

W script2.js:

a = 6 

Chciałbym zobaczyć okno dialogowe wyświetlające 6, ponieważ a zostało zmienione z 5 na 6 przez zaimportowanie script2.js, ale okno dialogowe pokazuje 5. Czego tu mi brakuje?

+0

Could linia po importScripts ("script2" .js "); -> self.postMessage (a), nie odwołuje się już do właściwego ja, ponieważ to zaimportowałeś? –

Odpowiedz

27

W tej funkcji oznacza, że ​​a będzie zawsze prywatny. Od importScripts adds to the global scope, JS woli uzyskać dostęp do bardziej zlokalizowanego a w funkcji, która publikuje a. Zamiast tego możesz opublikować self.a, która będzie miała wartość 6 zgodnie z oczekiwaniami.

EDIT: Ktoś ostatnio zapytał mnie o tym osobiście, więc zrobiłem demo, aby wyjaśnić zachowanie: http://pagedemos.com/importscript/

Powiązane problemy