Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用附加SDK在Firefox扩展中的Web Worker中未定义FileReaderSync_Javascript_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 使用附加SDK在Firefox扩展中的Web Worker中未定义FileReaderSync

Javascript 使用附加SDK在Firefox扩展中的Web Worker中未定义FileReaderSync,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我使用附加SDK在Firefox附加组件中获得了一个Web工作程序(而不是内容/工作程序)。我听从了瓦拉迪米尔的建议,让工人阶级开始工作: 现在,我可以在代码中启动一个worker,并通过发送/接收消息与之对话 这是我的main.js文件: //生成我们的日志读取器工作程序 var-worker=new-worker(data.url('log-reader.js'); //发送并响应一些虚拟消息 worker.postMessage(“光环”); worker.onmessage=函数(事件)

我使用附加SDK在Firefox附加组件中获得了一个Web工作程序(而不是内容/工作程序)。我听从了瓦拉迪米尔的建议,让工人阶级开始工作:

现在,我可以在代码中启动一个worker,并通过发送/接收消息与之对话

这是我的main.js文件:

//生成我们的日志读取器工作程序
var-worker=new-worker(data.url('log-reader.js');
//发送并响应一些虚拟消息
worker.postMessage(“光环”);
worker.onmessage=函数(事件){
console.log('从worker接收消息:'+事件数据);
};
这是我的log-reader.js文件:

//当main.js向该工作程序发送消息时调用此函数
//使用postMessage调用
onmessage=函数(事件){
var info=事件数据;
//回信
postMessage('嘿,addon,我收到你的消息:'+信息);
如果(!!FileReaderSync){
postMessage('错误:不支持FileReaderSync');
}否则{
postMessage(“支持FileReaderSync”);
}
//var reader=new FileReaderSync();
//postMessage('文件内容:'+reader.readAsText('/tmp/hello.txt');
};
我的问题是,在log-reader.js文件中没有定义FileReaderSync类,因此返回了错误消息。如果我取消对实际使用FileReaderSync的最后几行的注释,我将永远无法在我的加载项中返回消息

我尝试使用与Worker相同的技巧,创建一个dummy.jsm文件并在main.js中导入,但FileReaderSync仅在main.js中可用,在log-reader.js中不可用:

//在dummy.jsm中
var导出的_符号=[“工作者”];
var EXPORTED_SYMBOLS=[“FileReaderSync”];
//在main.js中
var{Worker,FileReaderSync}=Cu.import(data.url('workers.jsm');
卸载(data.url(“workers.jsm”);
我认为必须有一个解决方案,因为文档似乎表明Firefox中的Web工作者应该可以使用FileReaderSync类:

此接口仅在Worker中可用,因为它支持可能阻塞的同步I/O


那么,有没有一种方法可以使FileReaderSync在my Web Worker代码中可用呢?

实际上,如果定义了
FileReaderSync
,您的Worker会发送“错误”,因为您两次对其进行了否定。更改
!!FileReaderSync
!FileReaderSync
,它将正常工作

我猜您试图找出您注释掉的代码的问题。问题是,
reader.readAsText('/tmp/hello.txt')
不起作用-此方法需要一个blob(或)。工作程序本身无法构造文件,但您可以在扩展名中创建该文件,并将以下消息发送给工作程序:

worker.postMessage(新文件(“/tmp/hello.txt”);
注意:我不确定附加SDK是否定义了
文件
构造函数,您可能必须使用与
工作者
构造函数相同的技巧

然后,工人可以从该文件中读取数据:

onmessage=函数(事件)
{
var reader=new FileReaderSync();
postMessage(“文件内容:+reader.readAsText(event.data));
}

若要调试工作程序,请定义
worker.onerror=function(event){console.log(event.data);}
-否则您将看不到工作程序中发生的错误。再次感谢Wladimir!新手错误:P现在一切都很好,我也必须导出File类。