2012-02-09 19 views
3

私は、どのようにWebワーカーで他のライブラリを使用できますか?

var worker = new Worker("javascript/worker.js"); 

worker.onmessage = function(evt) 
{ 
    // stuff 
} 

worker.jsをこのようないくつかのJavaScriptコードを持っているが、このようになり、

importScripts("base.js"); 

function getImage() 
{ 
    $.ajax({ 
    url: 'URL' 
    dataType: "text/plain; charset=x-user-defined", 
    mimeType: "text/plain; charset=x-user-defined", 
    success: function(data, textStatus, jqXHR) 
    { 
     callback(); 
    } 
}); 
} 

worker.jsファイルはjQueryのようには動作しません含まれていません。私はworker.jsにこれを追加した場合、

importScripts("jQuery.js"); 

は、その後、私はメッセージを取得し、

Uncaught ReferenceError: window is not defined 

私は労働者と本当に慣れていませんよ。これは、完全に別の環境(基本的にバックグラウンドスレッド)でworker.jsコードを読み込んでいるので、ウィンドウへのアクセス権がないと思うのです。

+0

ないあなたの質問への答えが、あなたは本当にこの例では、作業者が必要なのでしょうか? AJAX要求はすでに非同期に実行されます。 – millimoose

+0

おそらくあなたは正しいです。私はいくつかの既存のコードを取って修正していました。既存のコードは、私が推測している非同期ではないXMLHttpRequestを使用していましたか?結局のところ、その答えが私の顔を明るく照らしているかもしれません。 – peter

答えて

0

ええ、私は、ajax呼び出しが非同期であるため、ワーカーが必要ないことを正しく指摘しています。私が説明しない状況では、とにかくajax呼び出しがうまくいかなかったことが判明したので、XMLHttpRequestに戻り、それがどのように働いていたのかをワーカーに任せました。

2

Webワーカーが並行性の問題に遭遇するのを防ぐために、Webワーカー仕様では、ワーカーがウィンドウオブジェクトまたはDOMにアクセスできなくなります。

ワーカー内の利用可能な唯一のオブジェクトおよびメソッドは次のとおり

  1. ナビゲータオブジェクト
  2. 位置オブジェクト
  3. のXMLHttpRequest
  4. のsetTimeout及びてclearTimeout機能します。
  5. アプリケーションキャッシュ
  6. 産卵他のWeb労働者は、手動のXMLHttpRequestを作成するために労働者を使用することができながら、

だから、他のスクリプトをロードするためにwebworker具体的な方法を使用して

  • 。 JqueryやDOMやWindowオブジェクトにアクセスできると期待している他のライブラリは決してそこで動作することはありません。労働者の.jsファイルに

  • 5

    importScripts('../relative/path/lib.min.js', '../../other/lib.js'); 
    
    +0

    これを使用してWebコンポーネントをロードできますか? – loretoparisi

    関連する問題