2013-01-24 33 views
21

なぜこのエラーが発生しますか?Uncaught ReferenceError:importScriptsが定義されていません

このグローバル機能を正しく使用できるはずですか?

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

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

私はhttps://code.google.com/p/bitjs/を使用していますし、それがこのコードは、ワーカースクリプト内であることが必要

importScripts('io.js'); 
importScripts('archive.js'); 
+0

ワーカーをどのように産んでいますか? – Bergi

+0

これは労働者を生み出すだろうと思った?これがhttps://code.google.com/p/bitjs/source/browse/unzip.js – netigger

+0

で使用する方法です。いいえ、これはワーカースクリプト内にある必要があります。方法についてはhttps://code.google.com/p/bitjs/source/browse/archive.js#278を参照するか、リンクしたチュートリアルに従います – Bergi

答えて

10

で始まります。作業者自身は新しいWorkerオブジェクトを使用して作成されます。Getting Started in the tutorialを参照してください。

あなたがリンクしたコードは、ワーカーの内部に作成されたhereです。

6

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

私はworker.jsファイルをwrappigことにより、このエラーを回避:代替ソリューションを提供していますロブことで以下のコメントを参照してください

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

+0

これはJasmineを使用する際の賢明な回避策です。 +1 – Liam

+4

代わりに ''function '=== typeof importScripts'を使用することを検討してください。 –

20

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

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

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

注意:addEventListenerはifステートメント内にあります。あなたがそれを外に置くと、あなたのコールバックは2回登録されます。かつてはグローバルな「ウィンドウ」に、そしてワーカーのグローバルには一度。

ハッピーコーディング!

+3

あなたの答えは意味をなさない。 2回の実行についてもっと知るためのリンクを教えてください。 – lokeshjain2008

関連する問題