Меню
Добавьте элементы в систем меню браузера.
Этот API основан на API "contextMenus" Chrome, который позволяет расширениям Chrome добавлять элементы в контекстное меню браузера. API browser.menus добавляет несколько функций к API Chrome.
До Firefox 55 этот API также первоначально назывался contextMenus, и это имя сохранено как псевдоним, поэтому вы можете использовать contextMenus для написания кода, который работает в Firefox и также в других браузерах.
Для использования этого API необходимо разрешение menus разрешение. Вы также можете использовать псевдоним contextMenus вместо menus, но если вы это сделаете, к API необходимо обращаться как browser.contextMenus.
За исключением menus.getTargetElement(), этот API нельзя использовать из скриптов содержимого.
Создание элементов меню
Чтобы создать элемент меню, вызовите метод menus.create(). Вы передаете этому методу объект, содержащий параметры для элемента, включая идентификатор элемента, тип элемента и контексты, в которых он должен отображаться.
Отслеживайте щелчки по элементу меню, добавив обработчик события menus.onClicked. Этот обработчик получит объект menus.OnClickData, содержащий подробности события.
Вы можете создать четыре разных типа элементов меню, в зависимости от значения свойства type , которое вы передаете в параметры для create():
- "normal": элемент меню, который просто отображает метку
- "checkbox": элемент меню, который представляет двоичное состояние. Он отображает галочку рядом с меткой. Щелчок по элементу переключает галочку. Обработчик щелчка получит два дополнительных свойства: "checked", указывающее, установлен ли флажок сейчас, и "wasChecked", указывающее, был ли флажок установлен до события щелчка.
- "radio": элемент меню, представляющий один из набора вариантов. Подобно флажку, он также отображает галочку рядом с меткой, и его обработчик щелчка получает "checked" и "wasChecked". Однако, если вы создаете более одного элемента "radio", эти элементы функционируют как группа элементов "radio": только один элемент в группе может быть выбран, и щелчок по элементу делает его выбранным элементом.
- "separator": линия, разделяющая группу элементов.
Если вы создали более одного элемента контекстного меню или более одного элемента меню инструментов, элементы будут размещены в подменю. Родительским элементом подменю будет метка с именем расширения. Например, вот расширение под названием "Демонстрация меню", которому добавлены два элемента контекстного меню:
Иконки
Если вы указали иконки для своего расширения, используя ключ "icons" манифеста, элемент меню будет отображать указанную иконку рядом с его меткой. Браузер попытается выбрать иконку размером 16x16 пикселей для обычного отображения или 32x32 пикселя для отображения высокой плотности:
Только для элементов в подменю, вы можете указать пользовательские иконки, передав опцию icons методу menus.create():
Пример
Вот контекстное меню, содержащее 4 элемента: обычный элемент, два элемента "radio" с разделителями по обе стороны и флажок. Элементам "radio" заданы пользовательские иконки.
Вы могли бы создать подменю, используя код такого типа:
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 в пользу настраиваемого пользовательского интерфейса контекстного меню.
-
Обновить отображаемое меню.
-
Удаляет элемент меню.
-
Удаляет все элементы меню, добавленные этим расширением.
-
Обновляет ранее созданный элемент меню.
События
-
Вызывается при нажатии на элемент меню.
-
Вызывается, когда браузер скрывает меню.
-
Вызывается, когда браузер отображает меню.
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | |
ACTION_MENU_TOP_LEVEL_LIMIT |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
ContextType |
Да | Да |
55'The 'editable' context does not include password fields. Use the 'password' context for this. |
? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
ItemType |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
OnClickData |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
create |
ДаЭлементы, не указывающие «контексты», не наследуют контексты от своих родителей. |
ДаЭлементы, не указывающие «контексты», не наследуют контексты от своих родителей. |
5548До версии 53, элементы, не указывающие «контексты», не наследовали контексты от своих родителей. |
? | ДаЭлементы, не указывающие «контексты», не наследуют контексты от своих родителей. |
14Элементы, не указывающие «контексты», не наследуют контексты от своих родителей. |
? | ? | Нет | ? | Нет | ? |
getTargetElement |
Нет | Нет | 63 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
onClicked |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
onHidden |
Нет | Нет | 6060 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
onShown |
Нет | Нет | 6060 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
overrideContext |
Нет | Нет | 64 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
refresh |
Нет | Нет | 6060 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
remove |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
removeAll |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
update |
Да | Да | 5548 | ? | Да | 14 | ? | ? | Нет | ? | Нет | ? |
Примеры расширений
Таблицы BCD загружаются только в браузере
Примечание:
Этот 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