我有一個需求,我需要與本機代碼進行通信以執行某些操作。我通過使用JS-Ctypes取得了成功,並且事情按預期正在平移。由於我的Web應用程序與本機代碼的通信需要一些時間,因此阻止了主JS線程從而凍結了UI。Firefox ChromeWorker未加載腳本
因此,我需要創建一個單獨的線程與本地代碼的通信進行委託,並將結果返回給主線程,以便向用戶提供相應的反饋。 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運行時,我得到螢火控制檯上的錯誤
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。
謝謝。
邁克,任何想法,爲什麼一個正常的工人對象可以加載腳本,而ChromeWorker無法加載相同的腳本? 嗯,關於您的第二條評論,我們將如何從我們的網絡應用程序訪問特權操作? – mackelkin 2012-07-23 17:59:15
>任何想法爲什麼一個正常的Worker對象可以加載腳本,而ChromeWorker無法加載相同的腳本。 那麼,你試圖加載一個外部URL作爲鉻文件,給它chrome特權。我不相信這是允許的。 >我們將如何從我們的網絡應用程序訪問特權操作 您將需要編寫附加組件並在其中添加功能並從您的Web應用程序中調用它。你所有的用戶將不得不安裝附加組件(我不知道)。 隨時發表您的意見 - https://bugzilla.mozilla.org/show_bug.cgi?id=757046 – 2012-07-24 16:05:17
我試圖做一個這樣的東西從一個附加組件(我們在FireFox 25在平均時間),並且我還得到了「無法加載腳本:file:/// C:/」等,並且沒有正確的路徑來加載我想要加載的文件。 – 2013-10-31 19:43:49