permissions
Typ | Array |
---|---|
Verpflichtend | Nein |
Manifest-Version | 2 oder höher |
Beispiel |
json;
|
Verwenden Sie den Schlüssel permissions
, um spezielle Berechtigungen für Ihre Erweiterung anzufordern. Dieser Schlüssel ist ein Array von Zeichenketten, und jede Zeichenkette ist eine Anfrage nach einer Berechtigung.
Wenn Sie Berechtigungen über diesen Schlüssel anfordern, kann der Browser den Benutzer bei der Installation darüber informieren, dass die Erweiterung bestimmte Privilegien anfordert und ihn bitten, zu bestätigen, dass er bereit ist, diese Privilegien zu gewähren. Der Browser kann dem Benutzer auch ermöglichen, die Privilegien einer Erweiterung nach der Installation zu überprüfen. Da die Anfrage von Privilegien die Bereitschaft der Benutzer beeinflussen kann, Ihre Erweiterung zu installieren, sollte das Anfordern von Privilegien sorgfältig überlegt werden. Zum Beispiel sollten unnötige Berechtigungen vermieden werden, und es könnte nützlich sein, Informationen darüber bereitzustellen, warum Sie Berechtigungen in der Beschreibung Ihrer Erweiterung im Store anfordern. Weitere Informationen zu den Überlegungen, die Sie anstellen sollten, finden Sie im Artikel Anfordern der richtigen Berechtigungen.
Informationen darüber, wie Sie Anfragen nach Berechtigungen testen und vorschauen können, finden Sie unter Testen von Berechtigungsanfragen auf der Extension Workshop-Seite.
Der Schlüssel kann drei Arten von Berechtigungen enthalten:
- Host-Berechtigungen (nur Manifest V2, Host-Berechtigungen werden im Manifest-Schlüssel
host_permissions
für Manifest V3 oder höher angegeben.) - API-Berechtigungen
- die
activeTab
-Berechtigung
Host-Berechtigungen
Hinweis: Wie Sie Host-Berechtigungen anfordern, hängt davon ab, ob Sie sie zur Installationszeit oder zur Laufzeit benötigen und welche Manifestversion Ihre Erweiterung verwendet.
- Manifest V2:
- Anforderung zur Installationszeit mit diesem (
permissions
) Manifest-Schlüssel. - Anforderung zur Laufzeit mit dem Manifest-Schlüssel
optional_permissions
.
- Anforderung zur Installationszeit mit diesem (
- Manifest V3 oder höher:
- Anforderung zur Installationszeit mit dem Manifest-Schlüssel
host_permissions
. - Anforderung zur Laufzeit mit dem Manifest-Schlüssel
optional_host_permissions
.
- Anforderung zur Installationszeit mit dem Manifest-Schlüssel
Host-Berechtigungen werden als Match-Muster angegeben, und jedes Muster identifiziert eine Gruppe von URLs, für die die Erweiterung zusätzliche Privilegien anfordert. Ein Beispiel für eine Host-Berechtigung könnte "*://developer.mozilla.org/*"
sein.
Die zusätzlichen Privilegien umfassen:
- XMLHttpRequest- und fetch-Zugriff auf diese Ursprünge ohne Cross-Origin-Einschränkungen (auch für Anfragen, die von Inhalts-Skripten gestellt werden)
- Die Möglichkeit, tabspezifische Metadaten ohne die "tabs"-Berechtigung zu lesen, wie die Eigenschaften
url
,title
undfavIconUrl
vontabs.Tab
-Objekten - Die Möglichkeit, programmgesteuert Inhalte und Stile in Seiten von diesen Ursprüngen zu injizieren.
- Die Möglichkeit, Ereignisse von der
webRequest
-API für diese Hosts zu empfangen - Die Möglichkeit, auf Cookies für diesen Host zuzugreifen, solange die
"cookies"
-API-Berechtigung ebenfalls inkludiert ist. - Das Umgehen des Tracking-Schutzes für Erweiterungsseiten, bei denen ein Host als vollständige Domain oder mit Wildcards angegeben ist. Inhalts-Skripte können jedoch nur den Tracking-Schutz für Hosts umgehen, die mit einer vollständigen Domain angegeben sind.
In Firefox erhalten Erweiterungen ab Version 56 automatisch Host-Berechtigungen für ihren eigenen Ursprung, der die Form hat:
moz-extension:/
wobei 60a20a9b-1ad4-af49-9b6c-c64c98c37920
die interne ID der Erweiterung ist. Die Erweiterung kann diese URL programmgesteuert durch Aufrufen von extension.getURL()
erhalten:
browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
API-Berechtigungen
API-Berechtigungen werden als Schlüsselwörter angegeben, und jedes Schlüsselwort benennt eine WebExtension API, die die Erweiterung verwenden möchte.
Diese Berechtigungen sind in Manifest V2 und höher verfügbar, es sei denn, es ist anders angegeben:
activeTab
alarms
background
bookmarks
browserSettings
browsingData
captivePortal
clipboardRead
clipboardWrite
contentSettings
contextMenus
contextualIdentities
cookies
debugger
declarativeNetRequest
declarativeNetRequestFeedback
declarativeNetRequestWithHostAccess
devtools
(Diese Berechtigung wird automatisch gewährt, wenn der Manifest-Schlüsseldevtools_page
vorhanden ist.)dns
downloads
downloads.open
find
geolocation
history
identity
idle
management
menus
menus.overrideContext
nativeMessaging
notifications
pageCapture
pkcs11
privacy
proxy
scripting
search
sessions
storage
tabHide
tabs
theme
topSites
unlimitedStorage
- 'userScripts' (siehe userScripts-Berechtigung)
webNavigation
webRequest
webRequestAuthProvider
(Manifest V3 und höher)webRequestBlocking
webRequestFilterResponse
webRequestFilterResponse.serviceWorkerScript
In den meisten Fällen gewährt die Berechtigung nur Zugriff auf die API, mit den folgenden Ausnahmen:
-
tabs
ermöglicht den Zugriff auf privilegierte Teile dertabs
API ohne die Notwendigkeit von Host-Berechtigungen:Tab.url
,Tab.title
, undTab.faviconUrl
.- In Firefox 85 und früher benötigen Sie auch
tabs
, wenn Sieurl
imqueryInfo
-Parameter fürtabs.query()
einbinden möchten. Der Rest dertabs
-API kann ohne Anforderung von Berechtigungen verwendet werden. - Seit Firefox 86 und Chrome 50 können auch entsprechende Host-Berechtigungen anstelle der "tabs"-Berechtigung verwendet werden.
- In Firefox 85 und früher benötigen Sie auch
-
webRequestBlocking
ermöglicht die Verwendung des"blocking"
-Arguments, sodass Sie Anfragen modifizieren und abbrechen können. -
downloads.open
ermöglicht die Nutzung derdownloads.open()
API. -
tabHide
ermöglicht die Nutzung dertabs.hide()
API.
activeTab-Berechtigung
Diese Berechtigung wird als "activeTab"
angegeben. Wenn eine Erweiterung die activeTab
-Berechtigung hat, dann werden der Erweiterung beim Benutzerinteraktion nur für den aktiven Tab zusätzliche Privilegien gewährt.
"Benutzerinteraktion" beinhaltet:
- der Benutzer klickt auf die browser action der Erweiterung oder auf eine Seitenaktion
- der Benutzer wählt ein Kontextmenüelement aus
- der Benutzer aktiviert ein von der Erweiterung definiertes Tastenkürzel
Die zusätzlichen Privilegien sind:
- Die Möglichkeit, JavaScript oder CSS programmgesteuert in den Tab einzufügen (siehe Laden von Inhalts-Skripten).
- Zugriff auf die privilegierten Teile der Tabs-API für den aktuellen Tab:
Tab.url
,Tab.title
, undTab.faviconUrl
.
Der Zweck dieser Berechtigung ist es, Erweiterungen die Erfüllung eines häufigen Anwendungsfalls zu ermöglichen, ohne ihnen sehr mächtige Berechtigungen zu geben. Viele Erweiterungen möchten "etwas auf der aktuellen Seite tun, wenn der Benutzer es verlangt".
Zum Beispiel könnte eine Erweiterung, die ein Skript auf der aktuellen Seite ausführen möchte, wenn der Benutzer eine Browseraktion anklickt, das activeTab
-Recht verwenden. Ohne activeTab
-Berechtigung müsste die Erweiterung das Host-Recht <all_urls>
anfordern. Dies würde der Erweiterung jedoch mehr Macht geben als nötig: Sie könnte jetzt Skripte in jeder Registerkarte jederzeit ausführen, anstatt nur im aktiven Tab und nur als Reaktion auf eine Benutzeraktion.
Hinweis: Sie können nur auf die Registerkarte/Daten zugreifen, die zu dem Zeitpunkt vorhanden waren, als die Benutzerinteraktion stattfand (z.B. der Klick). Wenn die aktive Registerkarte navigiert (z.B. durch das Beenden des Ladevorgangs oder eines anderen Ereignisses), erlaubt Ihnen die Berechtigung nicht mehr, auf die Registerkarte zuzugreifen.
Die activeTab
-Berechtigung ermöglicht den Skriptzugriff auf die oberste Ebene der Registerkarten-Seite und gleichherzige Frames. Das Ausführen von Skripten oder Modifizieren von Stilen innerhalb von Cross-Origin Frames kann zusätzliche Host-Berechtigungen erfordern. Natürlich gelten auch Einschränkungen und Begrenzungen in Bezug auf bestimmte Sites und URI-Schemata.
Normalerweise ist die mit activeTab
gewährte Registerkarte einfach die aktuell aktive Registerkarte, außer in einem Fall. Die menus
API ermöglicht es einer Erweiterung, ein Menüelement zu erstellen, das angezeigt wird, wenn der Benutzer auf eine Registerkarte klickt (d.h. auf das Element im Tabstrip, das es dem Benutzer ermöglicht, von einer Registerkarte zur anderen zu wechseln).
Wenn der Benutzer auf ein solches Element klickt, wird die activeTab
-Berechtigung für die Registerkarte, auf die der Benutzer geklickt hat, gewährt, auch wenn sie nicht die derzeit aktive Registerkarte ist (seit Firefox 63, Firefox-Bug 1446956).
Zugriff auf die Zwischenablage
Es gibt zwei Berechtigungen, die es der Erweiterung ermöglichen, mit der Zwischenablage zu interagieren:
clipboardWrite
-
In die Zwischenablage schreiben mit
Clipboard.write()
,Clipboard.writeText()
,document.execCommand("copy")
oderdocument.execCommand("cut")
clipboardRead
-
Aus der Zwischenablage lesen mit
Clipboard.read()
,Clipboard.readText()
oderdocument.execCommand("paste")
Weitere Informationen finden Sie unter Interaktion mit der Zwischenablage.
Unbegrenzter Speicher
Die unlimitedStorage
Berechtigung:
- Ermöglicht es Erweiterungen, jede durch die
storage.local
API auferlegte Quote zu überschreiten - In Firefox können Erweiterungen eine "persistente" IndexedDB-Datenbank erstellen, ohne dass der Browser den Benutzer zur Erlaubnis auffordert, wenn die Datenbank erstellt wird.
Beispiele
"permissions": ["*://developer.mozilla.org/*"]
In Manifest V2 nur, beantragen Sie privilegierten Zugriff auf Seiten unter developer.mozilla.org
.
"permissions": ["tabs"]
Beantragen Sie Zugriff auf die privilegierten Teile der tabs
API.
"permissions": ["*://developer.mozilla.org/*", "tabs"]
In Manifest V2 nur, beantragen Sie beide oben genannten Berechtigungen.