web-dev-qa-db-ja.com

Webワーカーのグローバル変数

グローバル変数が宣言されているこのWebワーカーを使用しています。新しく生成されたWebワーカー(ワーカー2)で同じ(ワーカー1のグローバル変数)にアクセスできますか?

WebワーカーでjQueryを使用しようとすると、「ウィンドウが定義されていません」というエラーが表示されます。 Web WorkerでjQueryを使用する方法はありますか?

 importScripts( 'jquery-latest.js'); 
 
 function fetch_ajax(url){
 $ .ajax({
 type: ' GET '、
 url:url、
 success:function(response){
 postMessage(response); 
 
 
} 
}); 
} 
 
 fetch_ajax( 'test.txt'); 
34
Nigilan

Webワーカーにはwindowオブジェクトがありません。

グローバル状態にアクセスするには、代わりにselfを使用します。メインスレッドとワーカースレッドの両方で機能するコードです。

ただし、親DOMにアクセスしたり操作したりすることはできません(例:get window.jQuery経由self.jQuery)。

メインスレッドウィンドウselfはWindowオブジェクトを指しますが、ワーカースレッドではselfは別のWorkerGlobalScopeオブジェクトを指します。

57
buley

@buleyのヒントに基づいて、私はそれを行いました:

var window = self;

importScripts(/* dependencies here */);

/* my code */

私の場合、ES6-Promise libを使用しようとしました: https://github.com/jakearchibald/es6-promise#readme

17
Felipe