用于加载远程 XUL 的 XULrunner 权限
XULrunner permissions for loading remote XUL
我只想使用 PHP(通过本地 AMPPS 服务器)来生成我所有的 XUL。看起来 XUL运行ner 不允许加载 "remote" URL(即 http://mylocaldomain.com
)。
我进行了大量搜索,看到看起来像答案的回复,但它们含糊不清或太旧了,我无法让它们发挥作用。我认为相关的答案是使用 nsIPermissionManager, there is an example at 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
文件中,XUL运行ner 中的错误控制台会给出此错误
Error: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIPermissionManager.add]
如果我在 Firefox 中 运行 它,我会得到这个错误
TypeError: Components.classes is undefined
我在这里也找到了这个 post,Is it possible to reference remote content from chrome.manifest? (XULRunner) 基本上看起来你把 application.ini
和 defaults\preferences\prefs.js
放在了你的服务器上,运行他们从那里。因此,如果我 运行 我的应用程序与 "...\xulrunner.exe" -app http://www.mylocaldomain.com/application.ini -jsconsole
XUL运行ner 只是说它无法解析 application.ini
.
所以问题是如何在 XUL运行ner 中进行设置以允许使用远程 URL?
编辑:第 2 轮(更像是第 50 轮,但谁在计算)
令人惊讶的是,没有关于远程 XUL 的教程。我买了一本书 Introductory XUL 整本书都没有关于远程 XUL 的字眼。是的,我本可以买一本不同的书,但随着年龄的增长,名单上的下一本是 2007 年的,在 Mozilla 破坏 XUL运行ner.
之前
虽然有一个附加组件,但由于本书的想法失败了,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");
但是在 运行 在 XUL运行ner 中我得到这个错误
TypeError: Components.utils is undefined
和以前一样。谷歌搜索了一下,我发现我需要这个
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
所以我将它添加到我的代码的顶部并得到了这个错误
TypeError: netscape.security.PrivilegeManager is undefined
如果你 google 得到 xulrunner "netscape.security.PrivilegeManager is undefined"
你会得到 4 个结果(有了这个 post 我猜现在是 5 个)。幸运的是,如果删除 xulrunner
你会得到更多的结果和一些字里行间的阅读,看起来 netscape.security.PrivilegeManager
已经过时了 (obsolete reference).
在我的一次搜索中 xulrunner "Components.utils is undefined"
(又是 4 个结果)在 SO Firefox Add-on SDK and js-ctypes 上出现了 post。基于此我尝试了这个
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
我认为这样做是可能的,因为有一个附加组件在做,看起来它只是几行,但这些行似乎是比核发射代码更严密保护的秘密。
所以回到追捕每一条最后的小兔子踪迹并发现更多的死胡同,至少在有人愿意泄露豆子之前。
好吧,这是一个糟糕的时刻。但正如我所看到的,很多 post 都没有得到答复,我将 post 找到答案。
<?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 个有助于调试的额外选项。我什至会删除样式表,但目前,似乎有一个错误会在我删除它时强制 XUL运行ner 进入全屏模式。
在过去的 2 个多月里,我一直在关注这个问题并制定解决方案。我不敢相信我一直浪费在有如此简单解决方案的东西上。
我只想使用 PHP(通过本地 AMPPS 服务器)来生成我所有的 XUL。看起来 XUL运行ner 不允许加载 "remote" URL(即 http://mylocaldomain.com
)。
我进行了大量搜索,看到看起来像答案的回复,但它们含糊不清或太旧了,我无法让它们发挥作用。我认为相关的答案是使用 nsIPermissionManager, there is an example at 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
文件中,XUL运行ner 中的错误控制台会给出此错误
Error: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIPermissionManager.add]
如果我在 Firefox 中 运行 它,我会得到这个错误
TypeError: Components.classes is undefined
我在这里也找到了这个 post,Is it possible to reference remote content from chrome.manifest? (XULRunner) 基本上看起来你把 application.ini
和 defaults\preferences\prefs.js
放在了你的服务器上,运行他们从那里。因此,如果我 运行 我的应用程序与 "...\xulrunner.exe" -app http://www.mylocaldomain.com/application.ini -jsconsole
XUL运行ner 只是说它无法解析 application.ini
.
所以问题是如何在 XUL运行ner 中进行设置以允许使用远程 URL?
编辑:第 2 轮(更像是第 50 轮,但谁在计算)
令人惊讶的是,没有关于远程 XUL 的教程。我买了一本书 Introductory XUL 整本书都没有关于远程 XUL 的字眼。是的,我本可以买一本不同的书,但随着年龄的增长,名单上的下一本是 2007 年的,在 Mozilla 破坏 XUL运行ner.
之前虽然有一个附加组件,但由于本书的想法失败了,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");
但是在 运行 在 XUL运行ner 中我得到这个错误
TypeError: Components.utils is undefined
和以前一样。谷歌搜索了一下,我发现我需要这个
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
所以我将它添加到我的代码的顶部并得到了这个错误
TypeError: netscape.security.PrivilegeManager is undefined
如果你 google 得到 xulrunner "netscape.security.PrivilegeManager is undefined"
你会得到 4 个结果(有了这个 post 我猜现在是 5 个)。幸运的是,如果删除 xulrunner
你会得到更多的结果和一些字里行间的阅读,看起来 netscape.security.PrivilegeManager
已经过时了 (obsolete reference).
在我的一次搜索中 xulrunner "Components.utils is undefined"
(又是 4 个结果)在 SO Firefox Add-on SDK and js-ctypes 上出现了 post。基于此我尝试了这个
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
我认为这样做是可能的,因为有一个附加组件在做,看起来它只是几行,但这些行似乎是比核发射代码更严密保护的秘密。
所以回到追捕每一条最后的小兔子踪迹并发现更多的死胡同,至少在有人愿意泄露豆子之前。
好吧,这是一个糟糕的时刻。但正如我所看到的,很多 post 都没有得到答复,我将 post 找到答案。
<?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 个有助于调试的额外选项。我什至会删除样式表,但目前,似乎有一个错误会在我删除它时强制 XUL运行ner 进入全屏模式。
在过去的 2 个多月里,我一直在关注这个问题并制定解决方案。我不敢相信我一直浪费在有如此简单解决方案的东西上。