【问题标题】:Proper way to define a plugin for a Firefox extension为 Firefox 扩展定义插件的正确方法
【发布时间】:2026-01-28 22:40:01
【问题描述】:

我编写了一个 Firefox 扩展程序 (MyPlugin),它为另一个 Firefox 扩展程序 (MainExtension) 添加了一些功能。我想把它放在 Mozilla 附加组件页面,但我想先检查一下构建这样一个扩展的最佳方法。

目前,我在 chrome.manifest 中用 MyPlugin 的 xul 覆盖 MainExtension 的 xul。在 MyPlugin 的 xul 中,一个标签调用一个 .js 文件,该文件定义了MainExtension.MyPlugin 及其所有可以被叠加层元素调用的方法。

这种设置本身可以吗?当我第一次尝试将插件上传到 Mozilla 附加组件页面时,我发现 install.rdf 的“requires”元素不再受支持。我一直认为这将负责检查 MainExtension 是否实际安装。我是否应该在我的插件中进行任何错误检查以确保安装了 MainExtension?我认为,如果没有安装 MainExtension,现在 chrome.manifest 中的覆盖线将失败,然后不会发生任何其他事情,这似乎很好。从功能上讲,我不打算在没有主扩展的情况下安装插件,所以这应该不是问题,但是由于我想将扩展发布到其他人可以下载的地方,我想确保我没有造成任何问题对他们来说(而且我对 Firefox 扩展结构不太熟悉——我主要是通过查看其他已发布的扩展来组合我的)。

【问题讨论】:

    标签: firefox-addon xul


    【解决方案1】:

    所以我在我的扩展上做了更多的工作,阅读了更多的在线文档,并咨询了一些更有经验的开发人员,我现在得到的解决方案是使用模块来定义我的扩展的一些基本内部部分.我在模块中创建了一个 MyPlugin 对象,然后通过使用一个模块对 Firefox 通用。然后使用 MainExtension 的 xul 覆盖层调用的脚本,我创建了另一个 chrome 对象(称为例如 MyPluginChrome),它仅包含与与 MainExtension 的 XUL 元素交互相关的函数。在问这个问题时,我虽然有必要定义一个 XPCOM 组件以使我的插件独立,这对于我的简单插件到现有扩展来说似乎有点矫枉过正,但是使用模块使得插件独立并没有太大的不同我做事的方式。

    为了了解如何执行上述操作,我使用了来自 Mozilla 开发者网络站点的 XUL School tutorialJavaScript Object Management 页面。本教程有点古怪(因为它是从另一个来源改编的)但非常有帮助。它也与 MDN 上的 Building an Extension 页面分开。其他几个较旧的网页在 Google 上的点击率较高,但我发现 XUL School 教程信息量最大且最有用。

    【讨论】:

      最近更新 更多