--- title: menus slug: Mozilla/Add-ons/WebExtensions/API/menus tags: - API - Add-ons - Extensions - Interface - Non-standard - Reference - WebExtensions - contextMenus - menus translation_of: Mozilla/Add-ons/WebExtensions/API/menus ---
Ajoutez des éléments au système de menus du navigateur.
Cette API est modélisée dans l'API "contextMenus" de Chrome, qui permet aux extensions Chrome d'ajouter des éléments au menu contextuel du navigateur. L'API browser.menus
ajoute quelques fonctionnalités à l'API de Chrome.
Avant Firefox 55, cette API s'appelait à l'origine contextMenus
, et ce nom a été retenu comme alias. Vous pouvez donc utiliser contextMenus
pour écrire du code qui fonctionne dans Firefox et dans d'autres navigateurs.
Pour utiliser cette API, vous devez avoir la permission des menus.
vous pouvez également utiliser l'alias contextMenus
à la place des menus
, mais si vous le faites, vous devez accéder aux API sous le nom browser.contextMenus
à la place.
Excepté que menus.getTargetElement()
, cette API ne peut pas être utilisée à partir de scripts de contenu.
Pour créer un élément de menu, appelez la méthode {{WebExtAPIRef("menus.create()")}}. Vous transmettez à cette méthode un objet contenant des options pour l'élément, y compris l'ID d'élément, le type d'élément et les contextes dans lesquels il doit être affiché.
Écoutez les clics sur votre élément de menu en ajoutant un écouteur à l'événement {{WebExtAPIRef("menus.onClicked")}}. Cet écouteur recevra un objet {{WebExtAPIRef("menus.OnClickData")}} contenant les détails de l'événement.
Vous pouvez créer quatre types différents d'élément de menu, en fonction de la valeur de la propriété type
que vous fournissez dans les options de create()
:
Si vous avez créé plus d'un élément de menu contextuel ou plus d'un élément de menu d'outils, les éléments seront placés dans un sous-menu. Le parent du sous-menu sera étiqueté avec le nom de l'extension. Par exemple, voici une extension appelée "Menu démo" qui ajoute deux éléments de menu contextuel:
Si vous avez spécifié des icônes pour votre extension à l'aide de la clé de manifest "icons", votre élément de menu affichera l'icône spécifiée à côté de son libellé. Le navigateur va essayer de choisir une icône de 16x16 pixels pour un affichage normal ou une icône de 32x32 pixels pour un affichage haute définition :
Uniquement pour les éléments d'un sous-menu, vous pouvez spécifier des icônes personnalisées en passant l'option icons
à {{WebExtAPIRef("menus.create()")}} :
Voici un menu contextuel contenant 4 éléments: un élément normal, deux éléments radio avec des séparateurs de chaque côté et une case à cocher. Les éléments radio sont dotés d'icônes personnalisées.
Vous pouvez créer un sous-menu comme celui-ci en utilisant du code comme :
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); var checkedState = true; browser.menus.create({ id: "check-uncheck", type: "checkbox", title: browser.i18n.getMessage("menuItemUncheckMe"), contexts: ["all"], checked: checkedState }, onCreated);
info.targetElementId
donné{{ Compat("webextensions.api.menus", 1, "true") }}
{{WebExtExamples("h2")}}
Cette API est basée sur l'API chrome.contextMenus
de chromium. Cette documentation est dérivée de context_menus.json
dans le code Chromium.
// Copyright 2015 The Chromium Authors. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.