menus.update()
更新先前建立的選單項。
為了與其他瀏覽器相容,Firefox 將此方法同時透過 contextMenus 和 menus 名稱空間提供。
這是一個非同步函式,返回一個 Promise。
語法
let updating = browser.menus.update(
id, // integer or string
updateProperties // object
)
引數
id-
integer或string。要更新的項的 ID。 updateProperties-
object。要更新的屬性。與傳遞給menus.create()的createProperties物件相同,但id不能設定。此外,icons只能針對選單命令進行更改,而不能針對頂級上下文選單進行更改。頂級圖示會匹配擴充套件在擴充套件清單檔案中宣告的主要圖示。checked可選-
boolean。複選框或單選按鈕項的初始狀態:選中為true,未選中為false。在給定的單選按鈕組中,一次只能選中一個單選按鈕項。 command可選-
string。描述使用者單擊該項時應執行的操作的字串。可識別的值有:"_execute_browser_action":模擬單擊擴充套件的瀏覽器操作,如果它有彈出視窗則開啟它(僅限 Manifest V2)"_execute_action":模擬單擊擴充套件的操作,如果它有彈出視窗則開啟它(僅限 Manifest V3)"_execute_page_action":模擬單擊擴充套件的頁面操作,如果它有彈出視窗則開啟它"_execute_sidebar_action":開啟擴充套件的側邊欄
有關詳細資訊,請參閱清單檔案
commands中特殊快捷方式的文件。當指定了可識別的值之一時,單擊該項不會觸發
menus.onClicked事件;而是觸發預設操作,例如開啟彈出視窗。否則,單擊該項將觸發menus.onClicked,然後可以使用該事件來實現備用行為。 contexts可選-
arrayofmenus.ContextType。此選單項將顯示的上下文陣列。如果省略此選項- 如果項的父項設定了上下文,則此項將繼承其父項的上下文
- 否則,該項將獲得一個上下文陣列 ["page"]。
documentUrlPatterns可選-
arrayofstring。允許您限制該項僅應用於 URL 與給定 匹配模式之一匹配的文件。這也適用於框架。 enabled可選-
boolean。此選單項是否啟用或停用。預設為true。 icons可選-
object。一個或多個要顯示在該項旁邊的自定義圖示。自定義圖示只能為出現在子選單中的項設定。此屬性是一個物件,其中為每個提供的圖示都有一個屬性:屬性的名稱應包含圖示的畫素大小,而 path 相對於擴充套件根目錄的圖示。瀏覽器會嘗試為正常顯示選擇一個 16x16 畫素的圖示,或為高密度顯示選擇一個 32x32 畫素的圖示。為避免任何縮放,您可以這樣指定圖示jsbrowser.menus.create({ icons: { 16: "path/to/geo-16.png", 32: "path/to/geo-32.png", }, });或者,您可以指定一個單一的 SVG 圖示,它將被適當地縮放
jsbrowser.menus.create({ icons: { 16: "path/to/geo.svg", }, });注意: 頂級選單項使用清單中指定的 圖示,而不是此鍵指定的圖示。
id可選-
string。要為此項分配的唯一 ID。對於事件頁面是必需的。不能與此擴充套件的另一個 ID 相同。 onclick可選-
function。單擊選單項時呼叫的函式。事件頁面不能使用此函式:它們應該註冊一個menus.onClicked的監聽器。 parentId可選-
integer或string。父選單項的 ID;這使得該項成為先前新增項的子項。注意:如果您建立了多個選單項,這些項將放置在子選單中。子選單的父項將以擴充套件的名稱標記。 targetUrlPatterns可選-
arrayofstring。與documentUrlPatterns類似,但允許您基於 anchor 標籤的href以及 img/audio/video 標籤的src屬性進行過濾。此引數支援任何 URL 方案,即使是通常不允許在匹配模式中使用的方案。 title可選-
string。要在該項中顯示的文字。除非type是 "separator",否則是必需的。您可以在字串中使用
%s。如果您在選單項中使用此功能,並且當選單顯示時頁面上選擇了一些文字,那麼選中的文字將被插入到標題中。例如,如果title是 "Translate '%s' to Pig Latin",使用者選擇了單詞 "cool" 然後激活了選單,那麼選單項的標題將是:"Translate 'cool' to Pig Latin"。如果標題包含一個 ampersand "&",則下一個字元將用作該項的訪問鍵,ampersand 不會顯示。例外情況是
- 如果下一個字元也是一個 ampersand:則會顯示一個 ampersand,並且不會設定訪問鍵。實際上,"&&" 用於顯示一個 ampersand。
- 如果下一個字元是插值指令 "%s":則 ampersand 不會顯示,也不會設定訪問鍵。
- 如果 ampersand 是標題中的最後一個字元:則 ampersand 不會顯示,也不會設定訪問鍵。
只有第一個 ampersand 將用於設定訪問鍵:後續的 ampersands 不會顯示,但也不會設定鍵。因此 "&A and &B" 將顯示為 "A and B" 並將 "A" 設定為訪問鍵。
type可選-
menus.ItemType。選單項的型別:"normal"(普通)、"checkbox"(複選框)、"radio"(單選按鈕)、"separator"(分隔符)。預設為 "normal"。 viewTypes可選-
extension.ViewType。選單項將顯示在該檢視型別列表。預設為任何檢視,包括沒有viewType的檢視。 visible可選-
boolean。該項是否顯示在選單中。預設為true。
返回值
一個 Promise,如果更新成功,它將以無引數的形式 fulfilled;如果更新失敗,它將以錯誤訊息的形式 rejected。
示例
此示例建立了一個選單項,然後在使用者單擊它時更新其標題
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);
}
});
擴充套件程式示例
瀏覽器相容性
載入中…
注意: 此 API 基於 Chromium 的 chrome.contextMenus API。本文件摘自 Chromium 程式碼中的 context_menus.json。