menus.create()
Создаёт новую пункта меню, задавая объект настроек, определяющий свойства элемента.
В отличие от других асинхронных функций, эта функция не возвращает промис, а использует необязательный обратный вызов для передачи информации об успехе или ошибке. Это связано с тем, что её результат — это идентификатор нового элемента.
Для совместимости с другими браузерами, Firefox предоставляет этот метод как через пространство имён contextMenus , так и через пространство имён menus. Однако, следует учитывать, что создать пункты меню инструментов (contexts: ["tools_menu"]) с помощью пространства имён contextMenus невозможно.
Синтаксис
browser.menus.create( createProperties, // object () => {/* … */} // optional function )
Параметры
createProperties-
object. Свойства нового пункта меню.-
checkedНеобязательно -
boolean. Начальное состояние пункта типа флажок или переключатель:trueдля выбранного иfalseдля невыбранного. Только один пункт переключатель может быть выбран в группе. -
commandНеобязательно -
string. Строка, описывающая действие, которое должно быть выполнено при нажатии на элемент. Распознаваемые значения:-
"_execute_browser_action": имитирует нажатие на действие расширения, открывая всплывающее окно, если оно есть (только Manifest V2) -
"_execute_action": имитирует нажатие на действие расширения, открывая всплывающее окно, если оно есть (только Manifest V3) -
"_execute_page_action": имитирует нажатие на действие страницы расширения, открывая всплывающее окно, если оно есть -
"_execute_sidebar_action": открывает боковую панель расширения
См. документацию по специальным командам в ключе manifest.json
commandsдля подробностей.При указании одного из распознаваемых значений нажатие на элемент не вызывает событие
menus.onClicked; вместо этого срабатывает стандартное действие, например, открытие всплывающего окна. В противном случае нажатие на элемент вызывает событиеmenus.onClicked, и его можно использовать для реализации резервного поведения. -
-
contextsНеобязательно -
array. Массив контекстов, в которых будет отображаться этот пункт меню. Если этот параметр опущен:menus.ContextType- если у родительского элемента установлены контексты, то этот элемент унаследует контексты родителя
- в противном случае, элементу присваивается массив контекстов ["page"].
-
documentUrlPatternsНеобязательно -
arraystring. Позволяет ограничить применение элемента только к документам, адрес которых соответствует одному из заданных шаблонов сопоставления. Это также относится к фреймам. -
enabledНеобязательно -
boolean. Включён или отключён ли этот пункт меню. По умолчаниюtrue. -
iconsНеобязательно -
object. Один или несколько пользовательских значков для отображения рядом с элементом. Пользовательские значки могут быть установлены только для элементов, отображаемых в подменю. Этот параметр представляет собой объект с одним свойством для каждого предоставленного значка: имя свойства должно включать размер значка в пикселях, а путь является относительным к значку из корневого каталога расширения. Браузер пытается выбрать значок размером 16x16 пикселей для обычного отображения или 32x32 пикселя для отображения высокой плотности. Чтобы избежать масштабирования, вы можете указать значки следующим образом:"icons": { "16": "path/to/geo-16.png", "32": "path/to/geo-32.png" }
Также можно указать один SVG-значок, и он будет масштабироваться соответствующим образом:
"icons": { "16": "path/to/geo.svg" }
Примечание: Верхний уровень пункта меню использует значки icons, указанные в манифесте, а не те, что указаны с этим ключом.
-
idНеобязательно -
string. Уникальный идентификатор, который нужно назначить этому элементу. Обязателен для неперсистентных страниц фона (событий) в Manifest V2 и в Manifest V3. Не может быть таким же, как у другого идентификатора этого расширения. -
onclickНеобязательно -
function. Функция, которая будет вызвана при нажатии на пункт меню. Страницы событий не могут использовать это: вместо этого они должны зарегистрировать обработчик дляmenus.onClicked. -
parentIdНеобязательно -
integerилиstring. Идентификатор родительского пункта меню; это делает элемент дочерним по отношению к ранее добавленному элементу. Примечание: если вы создали более одного пункта меню, элементы будут размещены в подменю. Родитель подменю будет помечен названием расширения. -
targetUrlPatternsНеобязательно -
arraystring. АналогичноdocumentUrlPatterns, но позволяет фильтровать поhrefтегов anchor иsrcатрибуту тегов img/audio/video. Этот параметр поддерживает любые схемы URL, даже те, которые обычно не допускаются в шаблоне сопоставления. -
titleНеобязательно -
string. Текст, который будет отображаться в элементе. Обязательно, еслиtypeне "separator".Вы можете использовать "
%s" в строке. Если вы сделаете это в пункте меню, и некоторый текст выделен на странице при отображении меню, тогда выделенный текст будет интерполирован в заголовок. Например, еслиtitleравно "Перевести '%s' на язык Pig Latin", а пользователь выбирает слово "cool", затем активирует меню, тогда заголовок пункта меню будет: "Перевести 'cool' на язык Pig Latin".Если заголовок содержит амперсанд "&", то следующий символ будет использоваться в качестве клавиши доступа для элемента, а амперсанд не будет отображаться. Исключение составляют:
- Если следующий символ также является амперсандом: тогда будет отображаться один амперсанд и никакая клавиша доступа не будет установлена. По сути, "&&" используется для отображения одного амперсанда.
- Если следующие символы — это директива интерполяции "%s": тогда амперсанд не будет отображаться, и никакая клавиша доступа не будет установлена.
- Если амперсанд является последним символом в заголовке: тогда амперсанд не будет отображаться, и никакая клавиша доступа не будет установлена.
Только первый амперсанд будет использован для установки клавиши доступа: последующие амперсанды не будут отображаться, но не будут устанавливать клавиши. Так "&A и &B" будет отображаться как "A и B" и установит "A" в качестве клавиши доступа.
В некоторых локализованных версиях Firefox (японская и китайская), клавиша доступа окружена скобками и добавлена к метке пункта меню, если только сама метка пункта меню не заканчивается на клавише доступа (
"toolkit(&K)"например). Для получения более подробной информации см. ошибку Firefox 1647373. -
typeНеобязательно -
. Тип пункта меню: "normal", "checkbox", "radio", "separator". По умолчанию "normal".menus.ItemType -
viewTypesНеобязательно -
. Список типов представлений, в которых будет отображаться пункт меню. По умолчанию любое представление, включая те, у которых нетextension.ViewTypeviewType. -
visibleНеобязательно -
boolean. Отображается ли элемент в меню. По умолчаниюtrue.
-
-
callbackНеобязательно -
function. Вызывается, когда элемент был создан. Если при создании элемента возникли проблемы, подробности будут доступны вruntime.lastError.
Возвращаемое значение
integer или string. ID вновь созданного элемента.
Примеры
В этом примере создаётся элемент контекстного меню, который отображается, когда пользователь выбрал текст на странице. Он просто записывает выделенный текст в консоль:
browser.menus.create({ id: "log-selection", title: "Log '%s' to the console", contexts: ["selection"] }); browser.menus.onClicked.addListener((info, tab) => { if (info.menuItemId === "log-selection") { console.log(info.selectionText); } });
В этом примере добавляются два пункта переключателя, которые вы можете использовать для выбора применения зелёной или синей границы к странице. Обратите внимание, что этому примеру потребуется разрешение activeTab.
function onCreated() { if (browser.runtime.lastError) { console.log("error creating item:", browser.runtime.lastError); } else { console.log("item created successfully"); } } browser.menus.create({ id: "radio-green", type: "radio", title: "Make it green", contexts: ["all"], checked: false }, onCreated); browser.menus.create({ id: "radio-blue", type: "radio", title: "Make it blue", contexts: ["all"], checked: false }, onCreated); let makeItBlue = 'document.body.style.border = "5px solid blue"'; let makeItGreen = 'document.body.style.border = "5px solid green"'; browser.menus.onClicked.addListener((info, tab) => { if (info.menuItemId === "radio-blue") { browser.tabs.executeScript(tab.id, { code: makeItBlue }); } else if (info.menuItemId === "radio-green") { browser.tabs.executeScript(tab.id, { code: makeItGreen }); } });
Примеры расширений
Совместимость с браузерами
| Рабочий стол | Мобильное устройство | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | |
create |
ДаЭлементы, которые не указывают «контексты», не наследуют контексты от своих родителей. |
ДаЭлементы, которые не указывают «контексты», не наследуют контексты от своих родителей. |
5548До версии 53, элементы, которые не указывают «контексты», не наследуют контексты от своих родителей. |
? | ДаЭлементы, которые не указывают «контексты», не наследуют контексты от своих родителей. |
14Элементы, которые не указывают «контексты», не наследуют контексты от своих родителей. |
? | ? | Нет | ? | Нет | ? |
accessKey |
Да | Да | 63 | ? | Да | 14Safari удаляет& из отображаемых заголовков элементов меню, но не поддерживает вызов элементов меню с помощью клавиш доступа. |
? | ? | Нет | ? | Нет | ? |
command |
Нет | Нет | 55 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
icons |
Нет | Нет | 56 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
visible |
62 | 79 | 63 | ? | 49 | 14 | ? | ? | Нет | ? | Нет | ? |
Примечание: Этот API основан на API chrome.contextMenus Chromium. Данная документация получена из context_menus.json кода Chromium.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus/create