什么是开发Firefox扩展程序最简单的方法?

66

我计划开发一个简单的Firefox扩展程序,它可以缩短当前活动选项卡的URL,显示弹出窗口并将其放入剪贴板。

在Google Chrome中,这相当容易(根据http://developer.chrome.com/extensions/getstarted.html)-- 纯JavaScript加上几个调用与浏览器UI交互的JavaScript API.

然而,在寻找好的Firefox扩展教程时,我找到的最正式的链接是:

根据它们所说,即使是最简单的与浏览器UI互动也需要学习XUL语言。除此之外,我还必须设置自定义的Firefox配置文件,以免在开发过程中损坏默认配置文件,创建复杂的目录结构,在晦涩难懂的XML中编写清单,弄清如何打包和测试我所实现的任何内容等。

现在是2013年,难道没有更简单的构建Firefox扩展程序的方法吗?

5个回答

73
2013年了,难道没有更简单的方法来构建Firefox扩展程序吗?
是有更简单的方法的!
你提供的链接已经过时了。现在有一种新的、更好的开发Firefox扩展程序的方法——Firefox Add-on SDK。
然而,仅仅通过谷歌搜索“firefox addon tutorial”之类的关键词很难找到它。我很惊讶Mozilla没有更积极地推广它,或者至少在你找到的那些页面上提到它。
以下是开始的步骤(适用于Mac/Linux,但PC应该也差不多):
  • https://addons.mozilla.org/en-US/developers/builder下载SDK并解压。
  • 快速浏览README文件(总是有用的)。
  • 从SDK目录(即README文件所在的目录)执行source bin/activate
  • 执行cfx docs -- 这会引导本地复制SDK文档并在浏览器中打开它。
  • 离开SDK目录,创建一个空目录用于您的扩展程序。
  • 在扩展程序目录内执行cfx init -- 这将生成所有必要的文件/目录。
  • 按照getting-started-with-cfx页面的其余部分操作:
    • 使用几行JS更新lib/main.js以将自定义小部件放置到附加栏中。
    • 执行cfx run -- 这将在其中打开全新的Firefox实例,其中包含您的新闪亮扩展。
总的来说,我只花了几个小时阅读文档,熟悉SDK API,找到了SDK module将小部件放在导航栏上而不是附加栏,并仅用大约50行JavaScript开发出完全功能的扩展程序。
希望有所帮助!
更新
有一个新的标准叫做WebExtensions 来自MDN

目前有几个工具集可用于开发Firefox附加组件,但WebExtensions将成为2017年底的标准。

如果您正在编写新的附加组件,我们建议您编写WebExtension


.bashrc中创建一个方便的快捷方式,这样你就不必手动cd到附加组件目录了:alias addon-sdk="cd /opt/addon-sdk && source bin/activate; cd -"。既然你提到了“Chrome扩展”,我想补充一下,我还创建了一个名为browser-action的模块,使得移植使用Chrome的chrome.browserAction API的扩展非常容易。 - Rob W
当我在我的新文件夹中启动bash cfx init时,我会收到以下错误信息: /opt/addon-sdk-1.16/bin/cfx: line 12: syntax error near unexpected token '(' /opt/addon-sdk-1.16/bin/cfx: line 12: 'cuddlefish_root = os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0])))' - rubo77
您需要通过 Python 启动 cfx,因此我创建了“alias cfx="python /opt/addon-sdk-1.16/bin/cfx"`。 - rubo77
抱歉,此链接的内容已被删除=(。这是关于编程的相关内容。 - kurumkan
@ArslArsl:你应该通过npm安装工具。但是SDK不能再用于开发新的扩展了。请参见https://dev59.com/UWIj5IYBdhLWcg3wTTcG#41107443。 - serv-inc

11
作为https://blog.mozilla.org/addons/2016/11/23/add-ons-in-2017/所述,唯一可行的方式将是使用WebExtensions。最后一个SDK扩展将在Firefox 52中被接受,而Firefox 57将结束所有其他扩展支持,仅支持WebExtensions。
Firefox复制了Google Chrome的扩展API。因此,您可以直接使用Chrome扩展程序,并查看Firefox是否已经支持所有API(目前应该是这样的)。 像NoScript的Giorgio Maone这样的程序员积极支持转变为WebExtensions
要开发WebExtension,您需要:
  • either the web-ext-tool that can be installed via

    npm install --global web-ext
    
  • or simply use Firefox's about:debugging or Chromium's chrome:extensions to temporarily load the webextension.

无论哪种方式,您都需要在自己创建的目录中使用manifest.json文件将所有功能粘合在一起。请参见https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension获取第一个示例。或者参考谷歌文档https://developer.chrome.com/docs/extensions/mv3/getstarted/


10

是的,您可以使用三种不同的技术来构建扩展:

  1. 基于 Add-on SDK 的扩展
  2. 手动引导的无需重启扩展
  3. 覆盖层扩展

您可以在这里阅读它们之间的比较。

如果可以的话,建议使用 Add-on SDK,它使用无需重启的扩展机制,但简化了某些任务并在自己完成后进行清理。如果 Add-on SDK 不能满足您的需求,则应实现手动无需重启的扩展。

使用 Add-on SDK 开始构建扩展的步骤

  1. 安装
  2. 创建用户界面
  • 与浏览器交互

  • 在Windows中,当Python安装在“Program Files(x86)”目录下时,“bin\activate”部分存在问题。 - ysap

    6

    两种官方开发方式 可以开发插件,每种方法都有优点和缺点:

    1- WebExtensions(新方法):

    WebExtensions 是 Firefox 插件的未来。如果你可以使用 WebExtensions API,那么这是最好的选择。你可以立即开发和发布 WebExtensions,但它们仍处于早期阶段。

    2- Add-on SDK(旧方法):

    Add-on SDK 提供了用于开发 Firefox 插件的 API,并提供了开发、测试和打包工具。


    5

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接