43

なぜこのエラーが発生し続けるのですか?

このグローバル関数を使用できるはずですよね?

http://www.html5rocks.com/en/tutorials/workers/basics/

クロームを使用しています。

https://code.google.com/p/bitjs/を使用していますが、

importScripts('io.js');
importScripts('archive.js');
4

5 に答える 5

50

ワーカーを作成すると、実際には2回実行されます。最初のパスは、グローバルな「ウィンドウ」オブジェクトのコンテキストにあります(つまり、すべてのウィンドウオブジェクト関数にアクセスできます)。2番目の呼び出しは、「importScripts」が存在する別のグローバルオブジェクトを持つワーカーのコンテキストで行われます。

// proper initialization
if( 'function' === typeof importScripts) {
   importScripts('script2.js');
   addEventListener('message', onMessage);

   function onMessage(e) { 
     // do some work here 
   }    
}

addEventListenerがifステートメント内にあることに注意してください。その外に配置すると、コールバックは2回登録されます。「ウィンドウ」グローバルに1回、ワーカーのグローバルに1回。

ハッピーコーディング!

于 2015-02-20T02:21:01.010 に答える
21

このコードは、ワーカースクリプト内にある必要があります。ワーカー自体は、新しいWorkerオブジェクトを介して作成されます。チュートリアルの「はじめに」を参照してください。

リンクしたコードは、ここで作成したワーカー内にあります。

于 2013-01-24T15:25:58.083 に答える
15

私もこのエラーに遭遇しました。私の場合、Karma/Jasmineを使用してコードをテストしているためです。テストフレームワークにより、worker.jsファイルはメインスレッドによってもロードされます。

私はworker.jsファイルを次のようにラップピッグすることでこのエラーを回避しました:

    if( 'undefined' === typeof window){
       importScripts('workerscript2.js');
    ...
    }

代替ソリューションを提供するRobによる以下のコメントを参照してください。

于 2014-01-24T14:51:12.650 に答える
2

エラーを回避するための解決策を提供していただきありがとうございます。私は新しいので投票できませんが、それを書いていますimportScripts('Myworkerscript.js');

 if( 'undefined' === typeof window){
   importScripts('Myworkerscript.js');
} 

そして魔法が起こり、エラーはなくなりました。

于 2021-09-14T08:01:50.777 に答える
1

直面しているリンティングの問題である場合は、importScriptsを含むファイルに次のコメントを追加できます。

/* eslint-disable no-undef */
于 2021-07-01T16:03:20.587 に答える