menus.create()
Erstellt einen Menüeintrag anhand eines Optionsobjekts, das die Eigenschaften des Eintrags festlegt.
Anders als andere asynchrone Funktionen gibt diese Funktion kein Promise zurück. Stattdessen verwendet sie einen optionalen Callback, um Erfolg oder Fehler mitzuteilen. Der Rückgabewert der Funktion ist nämlich die ID des neuen Eintrags.
Für die Kompatibilität mit anderen Browsern stellt Firefox diese Methode sowohl im Namespace contextMenus als auch im Namespace menus bereit.
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 (Event Pages), 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 zu erstellen, wenn die Seiten neu gestartet werden. Bei einem Aufruf auf oberster Ebene würde dies geschehen.- Persistente Hintergrundseiten:
- In Chrome bleiben Menüeinträge von persistenten Hintergrundseiten erhalten. Erstellen Sie Ihre Menüs in einem
runtime.onInstalled-Listener.- In Firefox bleiben Menüeinträge von 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 Erweiterung initialisieren auf der Seite über Hintergrundskripte 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 Radio-Eintrags:truefür ausgewählt undfalsefür nicht ausgewählt. In einer Gruppe von Radio-Einträgen kann jeweils nur ein Eintrag ausgewählt sein. commandOptional-
string. Zeichenfolge, die eine Aktion beschreibt, die beim Klicken auf den Eintrag ausgeführt werden soll. Folgende Werte werden erkannt:"_execute_browser_action": Simuliert einen Klick auf die browser action der Erweiterung und öffnet deren Popup, falls vorhanden (nur Manifest V2)."_execute_action": Simuliert einen Klick auf die action der Erweiterung und öffnet deren Popup, falls vorhanden (nur Manifest V3)."_execute_page_action": Simuliert einen Klick auf die page action der Erweiterung und öffnet deren Popup, falls vorhanden."_execute_sidebar_action": Öffnet die Seitenleiste der Erweiterung.
Einzelheiten finden Sie in der Dokumentation zu speziellen Tastenkombinationen für den 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 verwendet werden, um ein alternatives Verhalten zu implementieren. contextsOptional-
arrayvonmenus.ContextType. Array der Kontexte, in denen dieser Menüeintrag angezeigt wird. Wenn diese Option weggelassen wird:- Erbt der Eintrag die Kontexte seines übergeordneten Eintrags, falls 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 enthalten, und 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 ein Symbol 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 statt der mit diesem Schlüssel angegebenen Symbole.
idOptional-
string. Die eindeutige ID, die diesem Eintrag zugewiesen wird. Sie ist für nicht persistente Hintergrundseiten (Event Pages) in Manifest V2 und für Manifest V3 erforderlich. Sie darf nicht mit einer anderen ID dieser Erweiterung übereinstimmen. onclickOptional-
function. Die Funktion, die beim Klicken auf den Menüeintrag aufgerufen wird. Event Pages 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ü angeordnet. Der übergeordnete Eintrag des Untermenüs trägt den Namen der Erweiterung. targetUrlPatternsOptional-
arrayvonstring. Ähnlich wiedocumentUrlPatterns, ermöglicht jedoch die Filterung anhand vonhrefbei Anchor-Tags und des Attributssrcbei img/audio/video-Tags. Dieser Parameter unterstützt jedes URL-Schema, auch solche, die in einem Übereinstimmungsmuster normalerweise nicht zulässig sind. titleOptional-
string. Der im Eintrag angezeigte Text. Erforderlich, soferntypenicht "separator" ist.Sie können
%sin der Zeichenfolge verwenden. Wenn Sie dies in 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, 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 Und-Zeichen nicht angezeigt. Ausnahmen:
- Wenn das nächste Zeichen ebenfalls ein Und-Zeichen ist, wird ein einzelnes Und-Zeichen angezeigt und keine Zugriffstaste festgelegt. „&&“ dient somit dazu, ein einzelnes Und-Zeichen anzuzeigen.
- Wenn die nächsten Zeichen die Einfügeanweisung „%s“ sind, wird das Und-Zeichen nicht angezeigt und keine Zugriffstaste festgelegt.
- Wenn das Und-Zeichen das letzte Zeichen im Titel ist, wird es nicht angezeigt und keine Zugriffstaste festgelegt.
Nur das erste Und-Zeichen wird zum Festlegen einer Zugriffstaste verwendet. Nachfolgende 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 Firefox-Versionen (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 (beispielsweise
"toolkit(&K)"). Weitere Informationen 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 des Eintrags Probleme aufgetreten sind, stehen Einzelheiten inruntime.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 Radio-Einträge hinzu, mit denen Sie der Seite einen grünen oder blauen Rahmen zuweisen können. Dafür 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 basiert auf context_menus.json im Chromium-Code.