Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

menus

Fügen Sie der Menüstruktur des Browsers Elemente hinzu.

Diese API basiert auf der Chrome-API "contextMenus", mit der Chrome-Erweiterungen Elemente zum Kontextmenü des Browsers hinzufügen können. Die browser.menus API fügt der Chrome-API einige Funktionen hinzu.

Vor Firefox 55 wurde diese API ebenfalls ursprünglich contextMenus genannt, und dieser Name wurde als Alias beibehalten, sodass Sie contextMenus verwenden können, um Code zu schreiben, der sowohl in Firefox als auch in anderen Browsern funktioniert.

Um diese API zu verwenden, benötigen Sie die menus Berechtigung. Sie können auch den Alias contextMenus anstelle von menus verwenden, aber in diesem Fall müssen die APIs als browser.contextMenus aufgerufen werden.

Mit Ausnahme von menus.getTargetElement() kann diese API nicht von Inhalteskripten verwendet werden.

Erstellen von Menüelementen

Um ein Menüelement zu erstellen, rufen Sie die Methode menus.create() auf. Sie übergeben dieser Methode ein Objekt, das Optionen für das Element enthält, einschließlich der Element-ID, des Elementtyps und der Kontexte, in denen es angezeigt werden soll.

In einer Firefox-Erweiterung, die nicht-persistente Hintergrundseiten (Ereignisseiten) verwendet oder in einer beliebigen Chrome-Erweiterung rufen Sie menus.create innerhalb eines runtime.onInstalled Listeners auf. In einer Firefox-Erweiterung, die persistente Hintergrundseiten verwendet, machen Sie einen Aufruf auf höchster Ebene. Siehe menus.create() für weitere Informationen.

Hören Sie auf Klicks auf Ihr Menüelement, indem Sie einen Listener zum menus.onClicked Ereignis hinzufügen. Dieser Listener wird mit einem menus.OnClickData Objekt aufgerufen, das die Details des Ereignisses enthält.

Sie können vier verschiedene Arten von Menüpunkten erstellen, basierend auf dem Wert der type Eigenschaft, die Sie in den Optionen an create() übergeben:

  • "normal": ein Menüpunkt, der einfach nur ein Label anzeigt
  • "checkbox": ein Menüpunkt, der einen binären Zustand darstellt. Es zeigt ein Häkchen neben dem Label an. Ein Klick auf das Element schaltet das Häkchen um. Der Klick-Listener erhält zwei zusätzliche Eigenschaften: "checked", die anzeigt, ob das Element jetzt angehakt ist, und "wasChecked", die anzeigt, ob das Element vor dem Klickereignis angehakt war.
  • "radio": ein Menüpunkt, der eine Auswahl aus einer Gruppe von Möglichkeiten darstellt. Genau wie ein Kontrollkästchen zeigt es ein Häkchen neben dem Label an und sein Klick-Listener erhält "checked" und "wasChecked". Wenn Sie jedoch mehr als ein Radio-Element erstellen, funktionieren die Elemente als Gruppe von Radio-Elementen: Nur ein Element in der Gruppe kann angehakt sein und ein Klick auf ein Element macht es zum angehakten Element.
  • "separator": eine Linie, die eine Gruppe von Elementen trennt.

Wenn Sie mehr als ein Kontextmenüelement oder mehr als ein Werkzeugmenüelement erstellt haben, werden die Elemente in einem Untermenü platziert. Das Untermenü wird mit dem Namen der Erweiterung gekennzeichnet. Zum Beispiel finden Sie hier eine Erweiterung namens "Menu demo", die zwei Kontextmenüelemente hinzugefügt hat:

Kontextmenü mit zwei Elementen mit den Beschriftungen Please click me und Please click me too!

Icons

Wenn Sie für Ihre Erweiterung Icons mit dem "icons" Manifest-Key angegeben haben, wird Ihr Menüelement das angegebene Icon neben seinem Label anzeigen. Der Browser versucht, ein 16x16 Pixel großes Icon für eine normale Anzeige oder ein 32x32 Pixel großes Icon für eine hochauflösende Anzeige auszuwählen:

Kontextmenü mit zwei Elementen mit den Beschriftungen Please click me und Please click me too!

Nur für Elemente in einem Untermenü können Sie benutzerdefinierte Icons angeben, indem Sie die Option icons an menus.create() übergeben:

Kontextmenü mit zwei Elementen mit den Beschriftungen Please click me und Please click me too!. Die Option Please click me ist mit einem grünen Farbeimer-Icon gekennzeichnet. Die Option Please click me too ist mit einem blauen Farbeimer-Icon gekennzeichnet.

Beispiel

Hier ist ein Kontextmenü mit 4 Elementen: ein normales Element, zwei Radio-Elemente mit Trennzeichen auf jeder Seite und ein Kontrollkästchen. Die Radio-Elemente haben benutzerdefinierte Icons.

Kontextmenü mit vier Elementen mit den Beschriftungen Please remove me, Greenify, Bluify und Please uncheck me. Greenify und Bluify sind Radiobuttons mit benutzerdefinierten Icons.

Sie könnten ein solches Untermenü mit folgendem Code erstellen:

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

Typen

Die verschiedenen Kontexte, in denen ein Menü angezeigt werden kann.

Der Typ des Menüpunkts: "normal", "checkbox", "radio", "separator".

Informationen, die gesendet werden, wenn ein Menüpunkt angeklickt wird.

Eigenschaften

Die maximale Anzahl von obersten Erweiterungselementen, die zu einem Menüpunkt hinzugefügt werden können, dessen ContextType "browser_action" oder "page_action" ist.

Funktionen

Erstellt ein neues Menüelement.

Gibt das Element für eine gegebene info.targetElementId zurück.

Verbirgt alle standardmäßigen Firefox-Menüpunkte zugunsten eines benutzerdefinierten Kontextmenü-UI.

Aktualisiert ein Menü, das derzeit angezeigt wird.

Entfernt ein Menüelement.

Entfernt alle von dieser Erweiterung hinzugefügten Menüpunkte.

Aktualisiert ein zuvor erstelltes Menüelement.

Ereignisse

Wird ausgelöst, wenn ein Menüpunkt angeklickt wird.

Wird ausgelöst, wenn der Browser ein Menü verbirgt.

Wird ausgelöst, wenn der Browser ein Menü anzeigt.

Beispielerweiterungen

Browser-Kompatibilität

Hinweis: Diese API basiert auf der chrome.contextMenus API von Chromium. Diese Dokumentation leitet sich von context_menus.json im Chromium-Code ab.