开发Firefox扩展最简单的方法是什么
What is the easiest way to develop Firefox extension?
我计划开发一个简单的Firefox扩展,它将缩短当前活动选项卡的URL,显示一个带有缩短URL的弹出窗口,并将其放入剪贴板。
在谷歌浏览器中,这将非常容易(根据http://developer.chrome.com/extensions/getstarted.html)--纯JavaScript加上对与浏览器UI交互的JavaScript API-s的一些调用。
然而,在搜索了一个好的Firefox扩展教程后,我发现了最官方的链接:
- https://developer.mozilla.org/en-US/docs/Extensions
- https://developer.mozilla.org/en-US/docs/Building_an_Extension
- 如何编写Firefox插件
根据他们的说法,即使是与浏览器UI进行最简单的交互,我似乎也必须学习XUL语言。除此之外,我还必须设置自定义的Firefox配置文件,以免在开发过程中使用默认配置文件,创建复杂的目录结构,用模糊的XML编写清单,弄清楚如何打包和测试我实现的任何东西,等等
现在是2013年,难道没有更简单的方法来构建Firefox扩展吗?
现在是2013年,难道没有更简单的方法来构建Firefox扩展吗?
是的
你在问题中提供的链接已经过时得令人难以置信。有一种新的、更好的开发Firefox扩展的方法——Firefox插件SDK。
然而,仅仅按照"firefox插件教程"的思路在谷歌上搜索很难偶然发现它。我很惊讶Mozilla没有更积极地宣传它,或者至少在你找到的那些页面上提到它。
入门步骤(Mac/Linux,但对于PC应该非常相似):
- 从下载SDKhttps://addons.mozilla.org/en-US/developers/builder,打开包装
- 快速浏览README文件(总是很有用)
- 从SDK目录(README文件所在的目录)执行
source bin/activate
- 执行
cfx docs
——这将引导SDK文档的本地副本并在浏览器中打开它 - 保留SDK目录,为您的扩展创建一个空目录
- 在扩展目录中执行
cfx init
——这将生成所有必要的文件/目录 - 按照以下内容开始使用cfx页面:
- 只需使用几行JS更新
lib/main.js
,即可将自定义小部件放置到附加栏上 - 执行
cfx run
——这将打开新的Firefox实例,其中包含新的闪亮扩展
- 只需使用几行JS更新
总而言之,我只花了几个小时就阅读了文档,熟悉了SDK API-s,找到了将小部件放在导航栏而不是附加栏上的SDK模块,并用大约50行JavaScript开发了全功能扩展。
啊!
更新
有一个新的标准,叫做WebExtensions
来自MDN
目前有几个用于开发Firefox插件的工具集,但WebExtensions将在2017年底成为标准。
如果您正在编写新的加载项,我们建议您编写WebExtension。
截止日期https://blog.mozilla.org/addons/2016/11/23/add-ons-in-2017/,唯一的方法将是使用WebExtensions。Firefox 52将接受最后一个SDK扩展,而Firefox 57将终止所有其他扩展支持,仅支持WebExtensions。
Firefox复制了Google Chrome的扩展API。因此,您可以只需使用Chrome扩展,看看Firefox是否已经支持所有API(它们现在应该已经支持了)。NoScript的Giorgio Maone等程序员积极支持对WebExtensions的更改。
要开发WebExtension,您需要
-
web-ext
-可以通过安装的工具npm install --global web-ext
-
或者简单地使用Firefox的
about:debugging
或Chromium的chrome:extensions
来临时加载网络扩展。
无论哪种方式,您都需要在自己创建的目录中创建一个manifest.json
文件,该文件将所有功能粘合在一起。看见https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_first_WebExtension作为第一个例子。或者谷歌文档https://developer.chrome.com/getstarted.
是的,有三种不同的技术可以用来构建扩展:
- 基于SDK的附加组件扩展
- 手动启动的restartless扩展
- 覆盖扩展
你可以在这里阅读之间的比较
如果可以的话,建议使用插件SDK,它使用无重启扩展机制,但简化了某些任务和自行清理。如果插件SDK不足以满足您的需要,请实现手动无重启扩展。
步骤开始使用基于SDK的插件
- 安装
- 在OS X、FreeBSD、Linux上安装
- 使用Homebrew在OS X上安装
- 在Windows上安装
- 创建用户界面
- 与浏览器交互
有两种官方的开发插件的方法,每种方法都有优缺点:
1-WebExtensions(更新的方法):
WebExtensions是Firefox插件的未来。如果您可以使用WebExtensions API,这是最好的选择。您现在可以开发和发布WebExtensions,但它们仍处于早期状态。
2-附加SDK(旧方法):
插件SDK提供了用于开发Firefox插件的API,以及用于开发、测试和打包它们的工具。
我做了一个关于使用Firefox插件SDK开发扩展的教程:
如何使用插件SDK 开发Firefox扩展
- 打破承诺链的好方法是什么
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- knex:根据结果创建数组的合适方法是什么
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 使用Modernizr检测移动设备最可靠的方法是什么
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 让会话值可用于JavaScript的好方法是什么
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么