Spec-Zone.ru › Web Extensions

Меню

Добавьте элементы в систем меню браузера.

Этот 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": линия, разделяющая группу элементов.

Если вы создали более одного элемента контекстного меню или более одного элемента меню инструментов, элементы будут размещены в подменю. Родительским элементом подменю будет метка с именем расширения. Например, вот расширение под названием "Демонстрация меню", которому добавлены два элемента контекстного меню:

Context menu with two items labeled click me, and click me too!

Иконки

Если вы указали иконки для своего расширения, используя ключ "icons" манифеста, элемент меню будет отображать указанную иконку рядом с его меткой. Браузер попытается выбрать иконку размером 16x16 пикселей для обычного отображения или 32x32 пикселя для отображения высокой плотности:

Context menu with two items labeled click me, and click me too!

Только для элементов в подменю, вы можете указать пользовательские иконки, передав опцию icons методу menus.create():

Context menu with two items labeled click me, and click me too!. The click me option is labeled with a green paint can icon. The click me too option is labeled with a blue paint can icon.

Пример

Вот контекстное меню, содержащее 4 элемента: обычный элемент, два элемента "radio" с разделителями по обе стороны и флажок. Элементам "radio" заданы пользовательские иконки.

Context menu with four items labeled remove me, Greenify, Bluify, and uncheck me. Greenify and Bluify are radio buttons given custom icons. Вы могли бы создать подменю, используя код такого типа:

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);

Типы

menus.ContextType

Различные контексты, в которых может отображаться меню.

menus.ItemType

Тип элемента меню: "normal", "checkbox", "radio", "separator".

menus.OnClickData

Информация, отправляемая при нажатии на элемент меню.

Свойства

menus.ACTION_MENU_TOP_LEVEL_LIMIT

Максимальное количество элементов расширений верхнего уровня, которые могут быть добавлены в элемент меню, у которого ContextType равен "browser_action" или "page_action".

Функции

menus.create()

Создает новый элемент меню.

menus.getTargetElement()

Возвращает элемент для заданного info.targetElementId.

menus.overrideContext()

Скрыть все стандартные элементы меню Firefox в пользу настраиваемого пользовательского интерфейса контекстного меню.

menus.refresh()

Обновить отображаемое меню.

menus.remove()

Удаляет элемент меню.

menus.removeAll()

Удаляет все элементы меню, добавленные этим расширением.

menus.update()

Обновляет ранее созданный элемент меню.

События

menus.onClicked

Вызывается при нажатии на элемент меню.

menus.onHidden

Вызывается, когда браузер скрывает меню.

menus.onShown

Вызывается, когда браузер отображает меню.

END_OF_DOCUMENT_MARKER

Совместимость с браузерами

Рабочий стол Мобильные устройства
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.
48
? Да 14 ? ? Нет ? Нет ?
ItemType Да Да 5548 ? Да 14 ? ? Нет ? Нет ?
OnClickData Да Да 5548 ? Да 14 ? ? Нет ? Нет ?
create
ДаЭлементы, не указывающие «контексты», не наследуют контексты от своих родителей.
ДаЭлементы, не указывающие «контексты», не наследуют контексты от своих родителей.
55
48До версии 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 загружаются только в браузере

  • menu-accesskey-visible
  • menu-demo
  • menu-labelled-open
  • menu-remove-element
  • menu-search
  • session-state

Примечание:

Этот 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API