menus.create()
Erstellt einen Menüeintrag anhand eines Optionsobjekts, das dessen Eigenschaften festlegt.
Anders als andere asynchrone Funktionen gibt diese Methode kein Promise zurück. Stattdessen kann sie über einen optionalen Callback Erfolg oder Fehlschlag melden. Das liegt daran, dass ihr Rückgabewert die ID des neuen Eintrags ist.
Aus Gründen der Kompatibilität mit anderen Browsern stellt Firefox diese Methode sowohl im Namespace contextMenus als auch im Namespace menus bereit. Über den Namespace contextMenus können jedoch keine Einträge für das Werkzeugmenü (contexts: ["tools_menu"]) erstellt werden.
Menüs in Erweiterungen mit und ohne persistente Hintergrundseiten erstellen
Wie Sie Menüeinträge erstellen, hängt davon ab, ob Ihre Erweiterung Folgendes verwendet:
- nicht persistente Hintergrundseiten (eine Ereignisseite), bei denen Menüs über Neustarts des Browsers und der Erweiterung hinweg erhalten bleiben. Rufen Sie
menus.create(mit einer menüspezifischen ID) innerhalb einesruntime.onInstalled-Listeners auf. So vermeiden Sie wiederholte Versuche, den Menüeintrag bei jedem Neustart der Seiten zu erstellen, wie es bei einem Aufruf auf oberster Ebene der Fall wäre.- persistente Hintergrundseiten:
- In Chrome bleiben Menüeinträge aus persistenten Hintergrundseiten erhalten. Erstellen Sie Ihre Menüs in einem
runtime.onInstalled-Listener.- In Firefox bleiben Menüeinträge aus persistenten Hintergrundseiten nie erhalten. Rufen Sie
menus.createohne Bedingung auf oberster Ebene auf, um die Menüeinträge zu registrieren.Weitere Informationen finden Sie unter Die Erweiterung initialisieren auf der Seite zu Hintergrundskripten und unter Ereignisgesteuerte Hintergrundskripte im Extension Workshop.
Syntax
browser.menus.create(
createProperties, // object
() => {/* … */} // optional function
)
Parameter
createProperties-
object. Eigenschaften des neuen Menüeintrags.checkedOptional-
boolean. Der Anfangszustand eines Kontrollkästchen- oder Optionsfeld-Eintrags:truefür ausgewählt undfalsefür nicht ausgewählt. Innerhalb einer Gruppe von Optionsfeld-Einträgen kann jeweils nur ein Eintrag ausgewählt sein. commandOptional-
string. Zeichenfolge, die eine Aktion beschreibt, die beim Anklicken des Eintrags ausgeführt werden soll. Folgende Werte werden erkannt:"_execute_browser_action": Simuliert einen Klick auf die Browser-Aktion der Erweiterung und öffnet gegebenenfalls deren Popup (nur Manifest V2)."_execute_action": Simuliert einen Klick auf die Aktion der Erweiterung und öffnet gegebenenfalls deren Popup (nur Manifest V3)."_execute_page_action": Simuliert einen Klick auf die Seitenaktion der Erweiterung und öffnet gegebenenfalls deren Popup."_execute_sidebar_action": Öffnet die Seitenleiste der Erweiterung.
Einzelheiten finden Sie in der Dokumentation zu speziellen Tastenkombinationen beim manifest.json-Schlüssel
commands.Wenn einer der erkannten Werte angegeben ist, löst ein Klick auf den Eintrag nicht das Ereignis
menus.onClickedaus. Stattdessen wird die Standardaktion ausgeführt, beispielsweise das Öffnen eines Popups. Andernfalls löst ein Klick auf den Eintragmenus.onClickedaus; dieses Ereignis kann zur Implementierung eines alternativen Verhaltens verwendet werden. contextsOptional-
arrayvonmenus.ContextType. Array der Kontexte, in denen dieser Menüeintrag erscheint. Wenn diese Option weggelassen wird:- Erbt der Eintrag die Kontexte seines übergeordneten Eintrags, sofern für diesen Kontexte festgelegt sind.
- Andernfalls erhält der Eintrag das Kontext-Array ["page"].
documentUrlPatternsOptional-
arrayvonstring. Beschränkt den Eintrag auf Dokumente, deren URL mit einem der angegebenen Übereinstimmungsmuster übereinstimmt. Dies gilt auch für Frames. enabledOptional-
boolean. Gibt an, ob dieser Menüeintrag aktiviert oder deaktiviert ist. Der Standardwert isttrue. iconsOptional-
object. Ein oder mehrere benutzerdefinierte Symbole, die neben dem Eintrag angezeigt werden. Benutzerdefinierte Symbole können nur für Einträge in Untermenüs festgelegt werden. Diese Eigenschaft ist ein Objekt mit einer Eigenschaft für jedes bereitgestellte Symbol: Der Eigenschaftsname sollte die Größe des Symbols in Pixeln angeben; der Pfad zum Symbol ist relativ zum Stammverzeichnis der Erweiterung. Der Browser versucht, für eine normale Anzeige ein Symbol mit 16 × 16 Pixeln und für eine Anzeige mit hoher Pixeldichte eines mit 32 × 32 Pixeln auszuwählen. Um eine Skalierung zu vermeiden, können Sie Symbole wie folgt angeben:jsbrowser.menus.create({ icons: { 16: "path/to/geo-16.png", 32: "path/to/geo-32.png", }, });Alternativ können Sie ein einzelnes SVG-Symbol angeben, das entsprechend skaliert wird:
jsbrowser.menus.create({ icons: { 16: "path/to/geo.svg", }, });Hinweis: Der Menüeintrag auf oberster Ebene verwendet die im Manifest angegebenen Symbole und nicht die mit diesem Schlüssel festgelegten.
idOptional-
string. Die eindeutige ID, die diesem Eintrag zugewiesen wird. Für nicht persistente Hintergrundseiten (Ereignisseiten) in Manifest V2 und in Manifest V3 ist sie erforderlich. Sie darf nicht mit einer anderen ID dieser Erweiterung übereinstimmen. onclickOptional-
function. Die Funktion, die beim Anklicken des Menüeintrags aufgerufen wird. Ereignisseiten können diese Eigenschaft nicht verwenden; stattdessen sollten sie einen Listener fürmenus.onClickedregistrieren. parentIdOptional-
integeroderstring. Die ID eines übergeordneten Menüeintrags; dadurch wird der Eintrag einem zuvor hinzugefügten Eintrag untergeordnet. Hinweis: Wenn Sie mehr als einen Menüeintrag erstellt haben, werden die Einträge in einem Untermenü platziert. Der übergeordnete Eintrag des Untermenüs trägt den Namen der Erweiterung. targetUrlPatternsOptional-
arrayvonstring. Ähnlich wiedocumentUrlPatterns, ermöglicht aber die Filterung anhand vonhrefbei Anker-Tags und dessrc-Attributs bei img/audio/video-Tags. Dieser Parameter unterstützt jedes URL-Schema, auch solche, die in Übereinstimmungsmustern normalerweise nicht zulässig sind. titleOptional-
string. Der Text, der im Eintrag angezeigt wird. Erforderlich, soferntypenicht "separator" ist.Sie können
%sin der Zeichenfolge verwenden. Wenn Sie dies bei einem Menüeintrag tun und beim Anzeigen des Menüs Text auf der Seite ausgewählt ist, wird der ausgewählte Text in den Titel eingefügt. Wenntitlebeispielsweise "Translate '%s' to Pig Latin" lautet und der Benutzer das Wort "cool" auswählt und dann das Menü öffnet, lautet der Titel des Menüeintrags: "Translate 'cool' to Pig Latin".Wenn der Titel ein kaufmännisches Und-Zeichen "&" enthält, wird das folgende Zeichen als Zugriffstaste für den Eintrag verwendet und das kaufmännische Und-Zeichen nicht angezeigt. Ausnahmen sind:
- Wenn das nächste Zeichen ebenfalls ein kaufmännisches Und-Zeichen ist, wird ein einzelnes kaufmännisches Und-Zeichen angezeigt und keine Zugriffstaste festgelegt. Mit "&&" lässt sich also ein einzelnes kaufmännisches Und-Zeichen anzeigen.
- Wenn die nächsten Zeichen die Einfügeanweisung "%s" sind, wird das kaufmännische Und-Zeichen nicht angezeigt und keine Zugriffstaste festgelegt.
- Wenn das kaufmännische Und-Zeichen das letzte Zeichen im Titel ist, wird es nicht angezeigt und keine Zugriffstaste festgelegt.
Nur das erste kaufmännische Und-Zeichen wird zum Festlegen einer Zugriffstaste verwendet: Nachfolgende kaufmännische Und-Zeichen werden nicht angezeigt, legen aber auch keine Zugriffstasten fest. So wird "&A and &B" als "A and B" angezeigt und "A" als Zugriffstaste festgelegt.
In einigen lokalisierten Versionen von Firefox (Japanisch und Chinesisch) wird die Zugriffstaste in Klammern gesetzt und an die Menübeschriftung angehängt, es sei denn, der Menütitel endet bereits mit der Zugriffstaste (zum Beispiel
"toolkit(&K)"). Weitere Einzelheiten finden Sie unter Firefox-Bug 1647373. typeOptional-
menus.ItemType. Der Typ des Menüeintrags: "normal", "checkbox", "radio" oder "separator". Der Standardwert ist "normal". viewTypesOptional-
extension.ViewType. Liste der Ansichtstypen, in denen der Menüeintrag angezeigt wird. Standardmäßig wird er in allen Ansichten angezeigt, auch in solchen ohneviewType. visibleOptional-
boolean. Gibt an, ob der Eintrag im Menü angezeigt wird. Der Standardwert isttrue.
callbackOptional-
function. Wird aufgerufen, wenn der Eintrag erstellt wurde. Falls beim Erstellen Probleme aufgetreten sind, stehen Einzelheiten unterruntime.lastErrorzur Verfügung.
Rückgabewert
integer oder string. Die ID des neu erstellten Eintrags.
Beispiele
Dieses Beispiel erstellt einen Kontextmenüeintrag, der angezeigt wird, wenn der Benutzer Text auf der Seite ausgewählt hat. Der ausgewählte Text wird lediglich in der Konsole protokolliert:
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);
}
});
Dieses Beispiel fügt zwei Optionsfeld-Einträge hinzu, mit denen Sie der Seite einen grünen oder blauen Rahmen geben können. Für dieses Beispiel ist die Berechtigung activeTab erforderlich.
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,
});
}
});
Beispielerweiterungen
Browser-Kompatibilität
Hinweis:
Diese API basiert auf der API chrome.contextMenus von Chromium. Diese Dokumentation wurde aus context_menus.json im Chromium-Code abgeleitet.