Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Add a Menu Item to Firefox

学习本模块你需要 安装SDK 学习基础工具cfx.

如果你使用 jpm 替代cfx, 使用第三方模块的方式是不同的, 你应该阅读 jpm的相应版本替代本教程.

给予Python可能未来废弃,使用JPM基于nodejs(译者备注).

SDK还不能为火狐浏览器提供一个API添加新的菜单项。但它是可扩展的设计,所以任何人都可以建立和发布模块,使用插件开发者。幸运的是埃里克沃尔德写的MenuItems模块,能够使我们添加菜单项

本教程有双重的责任。它描述的一般方法,使用一个外部的在你的插件的第三方模块描述了如何使用特别的MenuItems模块添加一个菜单项

首先,创建一个新的扩展程序。创建一个目录名称为clickme(名称随意)找到它并运行cfx init初始化

mkdir clickme
cd clickme
cfx init

通常将创建目录结构:

  • clickme
    • data
    • docs
      • main.md
    • lib
      • main.js
    • package.json
    • README.md
    • tests
      • test-main.js
 

安装 menuitems

在 "clickme"下创建一个名称为"packages"的目录. 从 https://github.com/mykmelez/menuitems-jplib  下载 menuitems 并展开到刚才创建的"packages" 目录下:

mkdir packages
cd packages
tar -xf ../erikvold-menuitems-jplib-d80630c.zip

模块依赖

如果第三方模块取决于SDK模块可以马上使用它们但如果他们依赖于其他第三方模块你需要安装依赖以及

在软件包的主目录,你会发现一个叫做 "package.json"的文件.  打开它,看看一个名称"dependencies"的入口.  menuitems 包的入口:

"dependencies": ["vold-utils"]

这告诉我们需要安装 vold-utils 包, 我们可以从https://github.com/mykmelez/vold-utils-jplib 下载,并添加到 packages 目录下的旁边的menuitems.

使用menuitems

 Menuitems模块文档 告诉使用MenuItem()创建一个新的菜单项. MenuItem()可接受的附加选项, 我们将使用最迷你的配置:

  • id: 菜单项标示符
  • label:菜单项线上的文本
  • command: 用户选择菜单项的响应函数
  • menuid: 菜单项的父类标示符
  • insertbefore: 我们希望出现的标示符之前的位置
var menuitem = require("menuitems").Menuitem({
  id: "clickme",
  menuid: "menu_ToolsPopup",
  label: "Click Me!",
  onCommand: function() {
    console.log("clicked");
  },
  insertbefore: "menu_pageInfo"
});
 

接下来, 我们将声明menuitems的依赖包. 在你的add-on's package.json文件添加一行:

"dependencies": "menuitems"

Note that due to bug 663480, if you add a dependencies line to package.json, and you use any modules from the SDK, then you must also declare your dependency on that built-in package, like this:

"dependencies": ["menuitems", "addon-sdk"]

现在我们要做的。运行插件你会看到新的项目出现在工具菜单:选择它,你会看到info: clicked 出现在控制台

Caveats

第三方模块使用不直接支持的SDK功能的好方法,但由于第三方模块通常使用低级别的API它们可以通过Firefox的新版本

 

文档标签和贡献者

 此页面的贡献者: addOn, ziyunfei
 最后编辑者: addOn,