我有一个要求,我需要与本机代码进行通信以执行某些操作。我通过使用 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。
谢谢。