我有一个要求,我需要与本机代码进行通信以执行某些操作。我通过使用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使用情况的参考,但这不是我想要的,我想在我的网络应用程序中使用ChromeWorker。
感谢。
答案 0 :(得分:1)
该特定错误是NS_ERROR_DOM_BAD_URI
我不相信你在做什么会起作用,我知道它在Firefox中不会很快起作用,因为enablePrivilege完全消失了。