2012-07-22 62 views
1

我有一個需求,我需要與本機代碼進行通信以執行某些操作。我通過使用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。

謝謝。

回答

1

特定誤差是NS_ERROR_DOM_BAD_URI

我不相信你在做什麼工作,我知道很快在Firefox,因爲enablePrivilege會完全消失,它不會工作。

+0

邁克,任何想法,爲什麼一個正常的工人對象可以加載腳本,而ChromeWorker無法加載相同的腳本? 嗯,關於您的第二條評論,我們將如何從我們的網絡應用程序訪問特權操作? – mackelkin 2012-07-23 17:59:15

+0

>任何想法爲什麼一個正常的Worker對象可以加載腳本,而ChromeWorker無法加載相同的腳本。 那麼,你試圖加載一個外部URL作爲鉻文件,給它chrome特權。我不相信這是允許的。 >我們將如何從我們的網絡應用程序訪問特權操作 您將需要編寫附加組件並在其中添加功能並從您的Web應用程序中調用它。你所有的用戶將不得不安裝附加組件(我不知道)。 隨時發表您的意見 - https://bugzilla.mozilla.org/show_bug.cgi?id=757046 – 2012-07-24 16:05:17

+0

我試圖做一個這樣的東西從一個附加組件(我們在FireFox 25在平均時間),並且我還得到了「無法加載腳本:file:/// C:/」等,並且沒有正確的路徑來加載我想要加載的文件。 – 2013-10-31 19:43:49