menus
將專案新增到瀏覽器的菜單系統中。
此 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" manifest 鍵 為您的擴充套件程式指定了圖示,那麼您的選單項將在其標籤旁邊顯示指定的圖示。瀏覽器將嘗試為正常顯示選擇一個 16x16 畫素的圖示,為高密度顯示選擇一個 32x32 畫素的圖示。

僅對於子選單中的專案,您可以透過將 icons 選項傳遞給 menus.create() 來指定自定義圖示。

示例
這是一個包含 4 個專案的上下文選單:一個普通專案,兩個帶有分隔符的單選專案,以及一個複選框。單選專案被賦予了自定義圖示。

您可以使用類似以下的 JavaScript 程式碼建立子選單:
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"(分隔符)。
-
選單項被點選時傳送的資訊。
屬性
-
新增到上下文型別為 "browser_action" 或 "page_action" 的選單項中的頂級擴充套件項的最大數量。
函式
-
建立一個新的選單項。
-
返回給定
info.targetElementId的元素。 -
隱藏所有預設的 Firefox 選單項,以提供自定義上下文選單 UI。
-
更新當前正在顯示的選單。
-
移除一個選單項。
-
移除此擴充套件程式新增的所有選單項。
-
更新先前建立的選單項。
事件
-
選單項被點選時觸發。
-
瀏覽器隱藏選單時觸發。
-
瀏覽器顯示選單時觸發。
擴充套件程式示例
瀏覽器相容性
載入中…
注意:此 API 基於 Chromium 的 chrome.contextMenus API。本文件摘自 Chromium 程式碼中的 context_menus.json。