menus.update()

更新先前创建的菜单项。

为了与其他浏览器兼容,Firefox 通过 contextMenus 命名空间和 menus 命名空间提供了此方法。

这是一个异步函数,它返回一个 Promise

语法

js
let updating = browser.menus.update(
  id,               // integer or string
  updateProperties // object
)

参数

id

整数字符串。要更新的项的 ID。

updateProperties

对象。要更新的属性。与传递给 menus.create()createProperties 对象相同,但不能设置 id。此外,icons 只能更改菜单命令,而不能更改顶级上下文菜单。顶级图标与扩展清单文件中声明的扩展主图标匹配。

checked 可选

布尔值。复选框或单选按钮的初始状态:true 表示选中,false 表示未选中。在给定的单选按钮组中,一次只能选择一个单选按钮。

command 可选

字符串。描述用户点击该项时应采取的操作的字符串。识别的值是

  • "_execute_browser_action":模拟点击扩展的浏览器操作,如果扩展有弹出窗口,则打开它(仅限清单 V2)
  • "_execute_action":模拟点击扩展的操作,如果扩展有弹出窗口,则打开它(仅限清单 V3)
  • "_execute_page_action":模拟点击扩展的页面操作,如果扩展有弹出窗口,则打开它
  • "_execute_sidebar_action":打开扩展的侧边栏

有关详细信息,请参阅 manifest.json 键 commands 中特殊快捷方式的文档。

当指定其中一个识别值时,点击该项不会触发 menus.onClicked 事件;而是触发默认操作,例如打开弹出窗口。否则,点击该项会触发 menus.onClicked,并且可以使用该事件来实现回退行为。

contexts 可选

menus.ContextType数组。此菜单项将显示的上下文的数组。如果省略此选项

  • 如果该项的父项设置了上下文,则该项将继承其父项的上下文
  • 否则,该项将获得一个上下文数组 ["page"]。
documentUrlPatterns 可选

字符串数组。允许你限制该项仅适用于其 URL 与给定的 匹配模式 之一匹配的文档。这也适用于框架。

enabled 可选

布尔值。此菜单项是启用还是禁用。默认为 true

icons 可选

对象。要在该项旁边显示的一个或多个自定义图标。自定义图标只能为出现在子菜单中的项设置。此属性是一个对象,其中包含每个提供的图标的一个属性:属性的名称应包含图标的大小(以像素为单位),路径相对于扩展根目录中的图标。浏览器尝试为普通显示选择一个 16x16 像素的图标,或为高密度显示选择一个 32x32 像素的图标。要避免任何缩放,你可以这样指定图标

js
browser.menus.create({
  icons: {
    16: "path/to/geo-16.png",
    32: "path/to/geo-32.png",
  },
});

或者,你可以指定一个 SVG 图标,它将按比例缩放

js
browser.menus.create({
  icons: {
    16: "path/to/geo.svg",
  },
});

注意:顶级菜单项使用清单中指定的 icons,而不是使用此键指定的图标。

id 可选

字符串。要分配给此项的唯一 ID。事件页面必须指定此属性。不能与该扩展的另一个 ID 相同。

onclick 可选

函数。点击菜单项时调用的函数。事件页面不能使用此属性:而是,它们应该为 menus.onClicked 注册一个监听器。

parentId 可选

整数字符串。父菜单项的 ID;这会使该项成为先前添加的项的子项。注意:如果你创建了多个菜单项,则这些项将放置在子菜单中。子菜单的父项将用扩展的名称标记。

targetUrlPatterns 可选

字符串数组。类似于 documentUrlPatterns,但允许你根据锚标记的 href 属性和 img/audio/video 标记的 src 属性进行筛选。此参数支持任何 URL 方案,即使是通常不允许在匹配模式中使用的方案。

title 可选

字符串。要在该项中显示的文本。除非 type 为 "separator",否则必须指定此属性。

你可以在字符串中使用 "%s"。如果你在菜单项中这样做,并且在显示菜单时页面中选择了一些文本,则所选文本将被插入到标题中。例如,如果 title 为 "将 '%s' 翻译成 Pig Latin" 并且用户选择了单词 "cool",然后激活菜单,则菜单项的标题将为:"将 'cool' 翻译成 Pig Latin"。

如果标题包含一个与号 "&",则下一个字符将用作该项的访问键,并且不会显示与号。例外情况是

  • 如果下一个字符也是与号:则将显示单个与号,并且不会设置访问键。实际上,"&&" 用于显示单个与号。
  • 如果下一个字符是插值指令 "%s":则不会显示与号,也不会设置访问键。
  • 如果与号是标题中的最后一个字符:则不会显示与号,也不会设置访问键。

仅第一个与号将用于设置访问键:后续的与号将不会显示,但也不会设置键。因此 "&A and &B" 将显示为 "A and B" 并将 "A" 设置为访问键。

type 可选

menus.ItemType。菜单项的类型:“normal”(普通)、“checkbox”(复选框)、“radio”(单选按钮)、“separator”(分隔符)。默认为“normal”。

viewTypes 可选

extension.ViewType。显示菜单项的视图类型列表。默认为任何视图,包括没有viewType的视图。

visible 可选

boolean。菜单项是否显示。默认为true

返回值

一个Promise,如果更新成功,则以无参数的方式完成,如果更新失败,则以错误消息拒绝。

示例

此示例创建一个菜单项,然后在用户单击该菜单项时更新其标题

js
function onUpdated() {
  console.log("item updated successfully");
}

function onError() {
  console.log("error updating item:", browser.runtime.lastError);
}

browser.menus.create({
  id: "do-not-click-me",
  title: "Do not click this button",
  contexts: ["all"],
});

browser.menus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "do-not-click-me") {
    let updating = browser.menus.update(info.menuItemId, {
      title: "Do not click this button again",
    });
    updating.then(onUpdated, onError);
  }
});

扩展示例

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

注意:此 API 基于 Chromium 的 chrome.contextMenus API。此文档来自 Chromium 代码中的 context_menus.json