gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:45:26 25 4
gpt4 key购买 nike

我设法使用附加 SDK 在我的 Firefox 附加组件中获得了 Web Worker(不是内容/worker)。我遵循 Wladimir 的建议让 Worker 类正常工作:Concurrency with Firefox add-on script and content script

现在,我可以在代码中启动一个工作线程,并可以通过发送/接收消息来与其交谈。

这是我的 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);
};

这是我的 log-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 类未在 log-reader.js 文件中定义,因此我收到了错误消息。如果我取消注释实际使用 FileReaderSync 的最后几行,我将永远不会在我的插件中收到消息。

我尝试使用与 Worker 相同的技巧,创建一个 dummy.jsm 文件并导入到 main.js 中,但 FileReaderSync 仅在 main.js 中可用,而在 log-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 中的 Web Worker 使用:

This interface is only available in workers as it enables synchronous I/O that could potentially block.

那么,有没有办法让 FileReaderSync 在我的 Web Worker 代码中可用?

最佳答案

实际上,如果定义了 FileReaderSync ,则您的工作线程会发送“ERROR”,因为您两次否定了它。将 !!FileReaderSync 更改为 !FileReaderSync 即可正常工作。

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

worker.postMessage(new File("/tmp/hello.txt"));

注意:我不确定附加 SDK 是否定义了 File 构造函数,您可能必须使用与 Worker 相同的技巧 构造函数。

然后工作人员可以从此文件中读取数据:

onmessage = function(event)
{
var reader = new FileReaderSync();
postMessage("File contents: " + reader.readAsText(event.data));
}

关于javascript - 使用附加 SDK 的 Firefox 扩展中的 Web Worker 中的 FileReaderSync 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com