web-dev-qa-db-ja.com

importScripts(Webワーカー)

ImportScriptsを使用して2つ目のJavaScriptファイルをWebワーカーにロードしようとしましたが、エラーは発生しませんでしたが、機能しませんでした。この非常に単純な状況に問題を絞り込みました。

メインのHTMLファイルで:

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

Script1.jsで:

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

Script2.jsの場合:

a = 6

Script2.jsをインポートすることでaが5から6に変更されたため、6を表示するダイアログを見たいのですが、ダイアログに5が表示されます。

28
Vincent

関数でvar aを使用すると、aは常にプライベートになります。 importScriptsはグローバルスコープに追加する であるため、JSはaをポストする関数内のよりローカライズされたaにアクセスすることを好みます。代わりにself.aを投稿できます。これは予想どおり6になるはずです。

編集:最近誰かがこれについて私に直接尋ねたので、行動を明確にするためにデモを作りました: http://pagedemos.com/importscript/

38
dandavis