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が表示されます。
関数でvar a
を使用すると、a
は常にプライベートになります。 importScriptsはグローバルスコープに追加する であるため、JSはa
をポストする関数内のよりローカライズされたa
にアクセスすることを好みます。代わりにself.a
を投稿できます。これは予想どおり6になるはずです。
編集:最近誰かがこれについて私に直接尋ねたので、行動を明確にするためにデモを作りました: http://pagedemos.com/importscript/