2015-02-06 51 views
0

我只想使用PHP(通過本地AMPPS服務器)來生成我所有的XUL。看來XULrunner將不允許加載「遠程」URL(即http://mylocaldomain.com)。XULrunner加載遠程XUL的權限

我已經做了相當多的搜索,看到的回覆看起來像一個答案,但他們是含糊或相當老,我無法讓他們工作。我認爲這是一個相關的答案是使用nsIPermissionManager,有在https://developer.mozilla.org/en-US/docs/Using_Remote_XUL一個例子,但我無法得到它的工作

Components.classes["@mozilla.org/permissionmanager;1"] 
    .getService(Components.interfaces.nsIPermissionManager) 
    .add('http://www.mylocaldomain.com/', 'allowXULXBL', Components.interfaces.nsIPermissionManager.ALLOW_ACTION); 

我已經試過在年初的pref.js加載它,以及我的main.js並且都不起作用。如果我把它放在我的main.js文件中的XULrunner錯誤控制檯給這個錯誤

Error: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIPermissionManager.add]

,如果我在Firefox中運行它,我得到這個錯誤

TypeError: Components.classes is undefined

我也發現了這個帖子在這裏,Is it possible to reference remote content from chrome.manifest? (XULRunner)這基本上看起來要你把application.inidefaults\preferences\prefs.js放在你的服務器上並從那裏運行它們。所以如果我運行我的應用程序"...\xulrunner.exe" -app http://www.mylocaldomain.com/application.ini -jsconsole XULrunner只是說它不能解析application.ini

因此,如何在XULrunner中設置一個允許使用遠程URL的問題?

編輯:第2輪(以及更喜歡圓50,但誰的票)

令人吃驚的是,有沒有遠程XUL一個教程。我在整本關於遠程XUL的書中買了一本書Introductory XUL。是的,我可以買一本不同的書,但隨着年齡的增長,名單上的下一個是從2007年開始,在Mozilla將XULrunner肢解之前。

雖然有一個附加組件Remote XUL Manager,但本書的想法失敗了。讓我們解剖一下。在其近1000行代碼中,看起來需要2行來設置遠程URL的權限。

permissions.js在線路97你有

Services.perms.add(uri, ALLOW_REMOTE_XUL, ALLOW); 

和線路143你有

Services.io.newURI(aDomainString, null, null); 

放在一起,變量替換你

var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null); 
Services.perms.add(uri, "allowXULXBL", 1); 

要運行它,它看起來就像你需要在它之前加上這個一樣

Components.utils.import("resource://gre/modules/Services.jsm"); 

但在運行中的XULrunner我得到這個錯誤

TypeError: Components.utils is undefined

以前一樣。所以有點谷歌搜索,我發現我需要這個

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 

,所以我把它添加到我的代碼的頂部,並得到這個錯誤

TypeError: netscape.security.PrivilegeManager is undefined

如果你谷歌xulrunner "netscape.security.PrivilegeManager is undefined"你得到4次的結果(與這篇文章,我想它現在將是5)。幸運的是,如果刪除xulrunner,您會得到更多結果,並且看起來netscape.security.PrivilegeManager已過時(obsolete reference)。

在我的其中一個搜索xulrunner "Components.utils is undefined"(又4個結果)在SO上發佈了一個帖子,Firefox Add-on SDK and js-ctypes。在此基礎上我想這

const {Cu} = require('chrome'); 
Cu.import("resource://gre/modules/Services.jsm"); 

var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null); 
Services.perms.add(uri, "allowXULXBL", 1); 

其中給出這個錯誤

ReferenceError: require is not defined

我看來,這樣做是可能的,因爲是一個附加上這樣做,看起來像它只是一對夫婦的線,但這些線似乎是一個更密切保護核啓動代碼的祕密。

因此,回到尋找每一隻最後的小兔子蹤跡,發現更多的死衚衕,至少直到有人願意泄漏豆類。

回答

0

嗯,這是一個噢噢!但正如我看到很多這些帖子沒有回答,我將發佈答案。

<?xml version="1.0"?> 

<?xml-stylesheet href="main.css" type="text/css"?> 

<window id="main" title="My App" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 

    <vbox flex="1"> 
     <browser id="mainbrowser" src="http://www.mylocaldomain.com/main.xul" flex="1" /> 
    </vbox> 

</window> 

確實很簡單。 瀏覽器元素非常強大,可以從任何URL運行XUL,無需額外配置。請注意,上面沒有javascript,對於我的pref.js,這只是啓動我的本地main.xul所需的一個首選項,然後是有助於調試的5個額外選項。我甚至會刪除樣式表,但目前看來,當我刪除它時,會出現一個強制XULrunner進入全屏模式的錯誤。

我一直在尋找這個問題,並建立了過去2個月的工作。我無法相信我總是浪費在有這麼簡單解決方案的東西上。