是否可以从chrome.manifest引用远程内容?(XULRunner)

是否可以从chrome.manifest引用远程内容?(XULRunner),xulrunner,Xulrunner,我有一个xulrunner应用程序,我一直在尝试从chrome.manifest文件引用远程内容。这是我所在公司的一份申请;它在许多计算机上运行(其中大多数也被其他员工使用),作为一种互联网监控服务。我想解决的问题是:更新此类应用程序的代码通常需要我手动将修改后的文件复制到运行该应用程序的每台计算机上(我没有幸尝试通过xulrunner平台进行自动更新)。这个过程变得非常乏味。我想要的是一个web服务器,在这里可以访问所有xul和js文件,这样每个应用程序都可以从那里引用它们。这只需要我更新服务

我有一个xulrunner应用程序,我一直在尝试从chrome.manifest文件引用远程内容。这是我所在公司的一份申请;它在许多计算机上运行(其中大多数也被其他员工使用),作为一种互联网监控服务。我想解决的问题是:更新此类应用程序的代码通常需要我手动将修改后的文件复制到运行该应用程序的每台计算机上(我没有幸尝试通过xulrunner平台进行自动更新)。这个过程变得非常乏味。我想要的是一个web服务器,在这里可以访问所有xul和js文件,这样每个应用程序都可以从那里引用它们。这只需要我更新服务器上的代码,应用程序(重新启动时)将自动获取最新代码

我设法做到了:

我可以使用基于http的URL引用xul文件中的js脚本,一切都很好(我可以使用本地、二进制组件等),尽管xul文件必须是本地的——我想更改一下。但当我在chrome.manifest中写入一行时,如下所示:

内容我的应用程序

然后使用default/preferences/pref.js中的行

pref(“toolkit.defaultChromeURI”chrome://my_app/content/my_app.xul");

它只打开了一个控制台窗口(为了测试我使用-console选项手动运行应用程序),没有执行任何代码。该文件可以使用wget远程下载,所以我想这不是web服务器的问题

这些应用程序在Windows计算机上运行

是否有某种安全问题导致此类行为,或者我做错了什么?甚至可以将基于http的远程内容注册为chrome吗?

简短回答:

可以运行远程XUL应用程序,但需要在整个应用程序中进行大量结构更改

详细内容:

我们使用了一个类似的概念,就像你想在我们的产品中引入3周后在你的公司一样

您可以管理XUL Runner从远程位置获取XUL文件并执行它们。您可以在服务器上拥有所有相关的东西,如XUL文件、绑定js文件:)

但是:它不适用于“chrome://...“由于安全限制而导致的路径 意思:您必须更改应用程序中所有包含chrome路径的引用:(

从“”更改xul文件、绑定和js文件中的所有src规范chrome://dir/somefile指向相对路径,如“./dir/somefile”或“dir/somefile”

要从远程启动应用程序,请在prefs文件中添加以下行

pref(“toolkit.defaultChromeURI”,“http://”LOCATION“/bla.xul”); (XUL Runner将在启动应用程序后发出安全警告)

20分钟前,我测试了一些东西,发现(在删除了客户端上几乎所有的东西之后,尤其是现在服务器上的chrome文件夹)你甚至不再需要chrome.manifest,我想通过在google上查找“remote XUL chrome.manifest”来了解原因(这就是我在这里找到你的问题的原因)

我在客户端上需要的只是:XUL运行程序和应用程序内路径appication.ini和defaults/prefs.js


祝你好运首先,是的,XPCOM可以工作,来自服务器的二进制文件:未测试,访问本地二进制文件可以工作 但在几乎每个函数中都需要一个或多个以下访问方法之前(每当XUL Runner抱怨安全问题时),您必须在第一行或一行中添加大量代码:/

netscape.security.privilegmanager.enablePrivilege(“此处为以下一项或多项”)

通用浏览器阅读 通用浏览器 UniversalXPConnect 通用参考阅读 通用引用写入 通用文件阅读

如果您担心安全问题,我建议您在Mozilla开发网络/中心上阅读,以了解这些东西的具体用途。我的一位同事向我发布了这些代码,我还没有时间调查:p

但这还不是全部,你会有更多的访问问题(至少在架构改变后我仍然有),你不会像以前那样轻松地访问js-stuff(函数…)

通常,您必须修改您的调用,如

parent.YOURFUNCTION或window.parent.YOURFUNCTION或类似

为了让您了解我所说的“不那么容易”的意思,这里有一个架构更改后的代码示例(过去不到一半的代码…):


document.getElementById(“mainIframe”).contentDocument.getElementById(“UrlBar”).value=getSelectedBrowser().contentWindow.location.href;

这里有一个链接,指向您可能会发现有用的内容:。阅读原始消息,并获取如何实现所需内容的提示。

谢谢您的快速回复:)但是您能够以这种方式使用XPCOM吗?这对我来说很关键,因为应用程序需要连接到PostgreSQL数据库,并且它们使用自定义二进制组件来连接。如果这很重要,二进制文件可以是本地的。在我发布之前,我尝试了你建议的解决方案,但是我什么也没有得到(就像我说的,只有控制台窗口弹出,什么也没发生)。我已经读到,只能使用chrome注册内容中的XPCOM内容。在做了一些测试后,我可以说您的解决方案可以工作(部分),因为我无法创建任何XPCOM对象,尽管自定义组件接口可以从Components.interfaces读取。我得到的错误是:获取属性XPCComponents.classes的权限被拒绝。如果有一种简单的方法将域添加到受信任的域中(可能使用首选项),那就太好了。感谢您的帮助。我想这应该可以奏效,因为我在网上发现了一些类似的关于不受信任的域和特权的东西。我可以接受一些模糊的js使用,因为我在XUL中没有做太多的UI编程——这些应用程序不适合人类使用。