菜单
将项目添加到浏览器的菜单系统中。
此 API 模仿了 Chrome 的 "contextMenus" API,该 API 使 Chrome 扩展程序能够将项目添加到浏览器的上下文菜单中。browser.menus
API 在 Chrome 的 API 中添加了一些功能。
在 Firefox 55 之前,此 API 最初也称为 contextMenus
,并且该名称保留为别名,因此您可以使用 contextMenus
来编写适用于 Firefox 以及其他浏览器的代码。
要使用此 API,您需要具有 menus
权限。您也可以使用 contextMenus
别名而不是 menus
,但如果您这样做,则必须以 browser.contextMenus
的形式访问 API。
除了 menus.getTargetElement()
之外,此 API 无法从内容脚本中使用。
创建菜单项
要创建菜单项,请调用 menus.create()
方法。您将传递一个包含项目选项的对象给此方法,包括项目 ID、项目类型以及应该显示项目的上下文。
在使用非持久性 后台页面(事件页面)的 Firefox 扩展程序中,或者在任何 Chrome 扩展程序中,您从 runtime.onInstalled
监听器中调用 menus.create
。在使用持久性后台页面的 Firefox 扩展程序中,您进行顶层调用。有关更多信息,请参阅 menus.create()
。
通过向 menus.onClicked
事件添加监听器来监听菜单项的点击。此监听器将传递一个 menus.OnClickData
对象,其中包含事件的详细信息。
您可以根据在传递给 create()
的选项中提供的 type
属性的值来创建四种不同的菜单项类型。
- "normal":仅显示标签的菜单项。
- "checkbox":表示二进制状态的菜单项。它在标签旁边显示一个复选标记。点击项目将切换复选标记。点击监听器将传递两个额外的属性:"checked",表示项目当前是否选中,以及 "wasChecked",表示项目在点击事件之前是否选中。
- "radio":表示一组选项中的一项的菜单项。与复选框一样,它也在标签旁边显示一个复选标记,其点击监听器传递 "checked" 和 "wasChecked"。但是,如果您创建了多个单选按钮项目,则这些项目将作为一组单选按钮项目:组中只有一项可以选中,点击一个项目将使其成为选中的项目。
- "separator":用于分隔一组项目的线。
如果您创建了多个上下文菜单项或多个工具菜单项,则这些项目将放置在子菜单中。子菜单的父菜单将用扩展程序的名称标记。例如,以下是一个名为 "Menu demo" 的扩展程序,它添加了两个上下文菜单项。
图标
如果您已使用 "icons" 清单键 为扩展程序指定了图标,则菜单项将在其标签旁边显示指定的图标。浏览器将尝试为普通显示选择一个 16x16 像素的图标,或为高密度显示选择一个 32x32 像素的图标。
仅对于子菜单中的项目,您可以通过将 icons
选项传递给 menus.create()
来指定自定义图标。
示例
以下是一个包含 4 个项目的上下文菜单:一个普通项目、两个带分隔符的单选按钮项目和一个复选框。单选按钮项目被赋予了自定义图标。
您可以使用以下代码来创建这样的子菜单。
browser.menus.create(
{
id: "remove-me",
title: browser.i18n.getMessage("menuItemRemoveMe"),
contexts: ["all"],
},
onCreated,
);
browser.menus.create(
{
id: "separator-1",
type: "separator",
contexts: ["all"],
},
onCreated,
);
browser.menus.create(
{
id: "greenify",
type: "radio",
title: browser.i18n.getMessage("menuItemGreenify"),
contexts: ["all"],
checked: true,
icons: {
16: "icons/paint-green-16.png",
32: "icons/paint-green-32.png",
},
},
onCreated,
);
browser.menus.create(
{
id: "bluify",
type: "radio",
title: browser.i18n.getMessage("menuItemBluify"),
contexts: ["all"],
checked: false,
icons: {
16: "icons/paint-blue-16.png",
32: "icons/paint-blue-32.png",
},
},
onCreated,
);
browser.menus.create(
{
id: "separator-2",
type: "separator",
contexts: ["all"],
},
onCreated,
);
let checkedState = true;
browser.menus.create(
{
id: "check-uncheck",
type: "checkbox",
title: browser.i18n.getMessage("menuItemUncheckMe"),
contexts: ["all"],
checked: checkedState,
},
onCreated,
);
类型
-
菜单可以出现在其中的不同上下文。
-
菜单项的类型:"normal"、"checkbox"、"radio"、"separator"。
-
点击菜单项时发送的信息。
属性
-
可以添加到 ContextType 为 "browser_action" 或 "page_action" 的菜单项的顶级扩展项的最大数量。
函数
-
创建一个新的菜单项。
-
返回给定
info.targetElementId
的元素。 -
隐藏所有默认的 Firefox 菜单项,以便提供自定义的上下文菜单 UI。
-
更新当前正在显示的菜单。
-
删除菜单项。
-
删除此扩展程序添加的所有菜单项。
-
更新先前创建的菜单项。
事件
-
点击菜单项时触发。
-
浏览器隐藏菜单时触发。
-
浏览器显示菜单时触发。
浏览器兼容性
示例扩展
BCD 表仅在启用 JavaScript 的浏览器中加载。
注意:此 API 基于 Chromium 的 chrome.contextMenus
API。此文档源自 Chromium 代码中的 context_menus.json
。