1

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

谢谢。

4

1 回答 1

1

该特定错误是 NS_ERROR_DOM_BAD_URI

我不相信您正在做的事情会起作用,而且我知道它不会很快在 Firefox 中起作用,因为 enablePrivilege 将完全消失。

于 2012-07-23T17:16:02.680 回答