1

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

我设法做到了:

我可以使用基于 http 的 url 从 xul 文件中引用 js 脚本,并且一切正常(我可以使用本地、二进制组件等),尽管 xul 文件必须是本地的 - 我想更改。但是当我在 chrome.manifest 中写一行时:

内容 my_app http://path/to/app/files/

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

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

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

这些应用程序在 Windows 机器上运行。

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

4

3 回答 3

0

简短的回答:

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

详细地:

我们使用类似的概念,就像您想在我们的产品中介绍的 3 周以来在您的公司中介绍的那样。

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

但是:由于安全限制,它不适用于“chrome://...”路径,这意味着:您必须更改应用程序中所有包含 chrome-paths 的参考 :(

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

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

pref("toolkit.defaultChromeURI", "http://"LOCATION"/bla.xul"); (XUL-Runner 启动应用后会提示安全警告)

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

我在客户端上需要的只是:XUL-Runner 和 app-path 中的 appication.ini 和 defaults/prefs.js

祝你好运

于 2011-01-12T14:05:44.603 回答
0

首先,是的,XPCOM 可以工作,来自服务器的二进制文件:未经测试,可以访问本地二进制文件,但是您必须在第一行或一行中添加该怪物代码,然后才能在几乎每个函数中需要以下一种或多种访问方法(每当 XUL-Runner 抱怨安全问题时):/

netscape.security.PrivilegeManager.enablePrivilege("这里是以下一项或多项");

UniversalBrowserRead UniversalBrowserWrite UniversalXPConnect UniversalPreferencesRead UniversalPreferencesWrite UniversalFileRead

如果您担心安全性,我建议您在 Mozilla Development Network/Center 上阅读它,以了解这些东西到底是做什么的。我的一位同事向我发布了该代码,我还没有时间调查:P

但这还不是全部,您将遇到更多访问问题(至少在架构更改之后我仍然存在)。你不会像以前那样轻易地访问 js- 东西(函数...)。

通常您将不得不修改您的调用,例如

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

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

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

于 2011-01-12T17:45:10.990 回答
0

这是您可能会发现有用的链接:http: //fixunix.com/mozilla/575473-re-remote-xul.html。阅读原始消息以及如何实现您想要的提示。

于 2011-01-13T10:25:45.150 回答