一部の操作を実行するためにネイティブ コードと通信する必要があるという要件があります。私は JS-Ctypes を使用して成功しており、物事は期待どおりに進んでいます。Web アプリケーションからネイティブ コードとの通信には時間がかかるため、メインの JS スレッドがブロックされ、結果として UI がフリーズします。
したがって、ネイティブ コードとの通信を委任する別のスレッドを作成し、ユーザーに適切なフィードバックを提供するメイン スレッドに結果をポスト バックする必要があります。Firefox ChromeWorkerは、JS-Ctypes にアクセスできる独立したスレッドであるため、まさに私が使用する必要があるものです。
私の問題は、私の人生では、そのアプローチを使用してスクリプトをロードできないように見えることです。これは私が現在持っているものです:
main.js
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
Components.utils.import("resource://gre/modules/Services.jsm");
var worker = new ChromeWorker("js/fpman/myworker.js");
worker.onmessage = function(e){
console.log(e.data);
};
worker.postMessage('start');
myworker.js
self.onmessage = function(e){
var sum = 1 + 1;
postMessage("Sum is " + sum);
};
そのコードがメインの JS で実行されると、firebug コンソールでこのエラーが発生します
Failed to load script: http://localhost:8080/myapp/js/fpman/myworker.js (nsresult = 0x805303f4)
通常のワーカースレッドを使用する場合の注意点、つまり
var worker = new Worker("js/fpman/myworker.js");
js ファイル (myworker.js) が正常に読み込まれ、期待どおりの結果が得られますが、通常のワーカーは JS-Ctypes にアクセスできないため、もちろんそれだけでは不十分です。問題は、ChromeWorker の作成方法にあるようです。アプリケーションから ChromeWorker オブジェクトを適切にインスタンス化して使用する方法を教えてください。拡張機能で ChromeWorker を使用する方法について多くのリファレンスを見てきましたが、それは私が望んでいるものではなく、Web アプリケーションで ChromeWorker を使用したいと考えています。
ありがとう。