我設法使用附加SDK在我的Firefox附加組件中獲得Web Worker(不是內容/工作者)。我遵循弗拉基米爾的建議在這裏得到Worker類的工作:Concurrency with Firefox add-on script and content scriptFileReaderSync在Firefox擴展中使用附加SDK在Web Worker內部未定義
現在,我可以在我的代碼中啓動一個工作者,並且可以通過發送/接收消息與它交談。
這是我main.js文件:
// spawn our log reader worker
var worker = new Worker(data.url('log-reader.js'));
// send and respond to some dummy messages
worker.postMessage('halo');
worker.onmessage = function(event) {
console.log('received msg from worker: ' + event.data);
};
這是我的日誌文件reader.js:
// this function gets called when main.js sends a msg to this worker
// using the postMessage call
onmessage = function(event) {
var info = event.data;
// reply back
postMessage('hey addon, i got your message: ' + info);
if (!!FileReaderSync) {
postMessage('ERROR: FileReaderSync is not supported');
} else {
postMessage('FileReaderSync is supported');
}
// var reader = new FileReaderSync();
// postMessage('File contents: ' + reader.readAsText('/tmp/hello.txt'));
};
我的問題是,FileReaderSync類不是對數內定義reader.js文件,結果我得到錯誤信息。如果我取消註釋FileReaderSync實際使用的最後一行,我將永遠不會在我的插件中找回消息。
我用我用工人同樣的伎倆試圖通過創建一個dummy.jsm文件和導入在main.js,但FileReaderSync將只可在main.js,而不是在數reader.js:
// In dummy.jsm
var EXPORTED_SYMBOLS=["Worker"];
var EXPORTED_SYMBOLS=["FileReaderSync"];
// In main.js
var { Worker, FileReaderSync } = Cu.import(data.url('workers.jsm'));
Cu.unload(data.url("workers.jsm"));
我想,必須有一個解決方案,因爲該文件here似乎表明FileReaderSync類應可在Firefox網絡工作者:
此接口僅適用於勞動者,因爲它使可能會阻塞的同步I/O。
那麼,有沒有辦法讓FileReaderSync在Web Worker代碼中可用和可用?
要調試工人是有幫助的定義'worker.onerror =函數(事件){的console.log(event.data); ''否則你不會看到工人發生的錯誤。 – 2012-08-16 07:10:31