XUL:如何包含和扩展另一个 .xul 文件?

Posted

技术标签:

【中文标题】XUL:如何包含和扩展另一个 .xul 文件?【英文标题】:XUL: How to include and extend another .xul file? 【发布时间】:2011-06-06 19:31:18 【问题描述】:

我喜欢通过扩展 basic Firefox 窗口来创建一个窗口,该窗口在 chrome://browser/content/browser.xul 中定义为***元素(不是覆盖)。

我的问题是关于在其他扩展对其进行任何修改之前从基本窗口定义分支/分叉,并且不是关于如何将覆盖或修改应用于用户视为主 FF 窗口的内容。

你知道怎么做吗?

【问题讨论】:

【参考方案1】:

你的问题仍然是关于覆盖的。你的叠加层应该是这样的:

<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <window id="main-window">
        <commandset id="my-commands">
            ...
        </commandset>
    </window>
</overlay>

本示例将在浏览器窗口的根部添加一个&lt;commandset&gt; 元素(恰好是一个ID 为main-window&lt;window&gt; 元素)。

编辑:看来问题不在于在顶层添加元素,而在于创建现有 XUL 文档的分支。您可以通过在 chrome.manifest 中添加 override 指令来创建别名:

override chrome://myextension/content/browser.xul chrome://browser/content/browser.xul

现在您可以对别名仅应用叠加层:

overlay chrome://myextension/content/browser.xul chrome://myextension/content/browserOverlay.xul

覆盖适用于使这成为可能的 URL。现在您可以在新窗口中打开chrome://myextension/content/browser.xul,它应该是浏览器窗口,但应用了您的叠加层。请注意,这种方法有局限性,例如覆盖浏览器窗口的扩展将不会影响您的窗口(它们的覆盖仅适用于原始浏览器窗口 URL)。

【讨论】:

我将它保存为 my.xul,然后使用 chrome://... 打开它,但它什么也没显示。查看源码只显示my.xul内容,browser.xul内容不合并。 我已经在我的问题中声明我不需要对 browser.xul 应用任何更改,它被视为 FF 窗口,但从 basic 创建另一个窗口分叉FF 窗口(browser.xul 不与其他插件覆盖合并)。 哦,天哪,你的措辞再混乱不过了...要创建 Firefox 窗口的“分支”,请将其添加到 chrome.manifest:override chrome://myextension/content/browser.xul chrome://browser/content/browser.xul 现在仅将覆盖应用于你的“分叉”版本:overlay chrome://myextension/content/browser.xul chrome://myextension/content/browserOverlay.xul 就是这样,现在你可以在新窗口中打开chrome://myextension/content/browser.xul 我应该期待override 将基本的FF browser.xul 与我的browser.xul 合并吗? fork 这个词没有问题——它在这里并不完全适用。 override 将为常规 browser.xul 文档创建一个新别名。通过 URL 应用叠加层,这就是为什么您可以将叠加层应用于别名而不是原始浏览器窗口的原因。

以上是关于XUL:如何包含和扩展另一个 .xul 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 扩展和 XUL:获取页面源代码

在 xul 和 javascript 中通过按钮单击事件上的另一个工具提示文本更改工具提示文本

Firefox XUL 文本框:如何滚动到底部?

xul 创建一个按钮

Xul 的 listitem 命令属性不起作用?

Firefox 网络扩展 - 读取本地文件(最后下载的文件)