web_accessible_resources
Typ | Array |
---|---|
Verpflichtend | Nein |
Manifest-Version | 2 oder höher |
Beispiel |
json
|
Beschreibung
Manchmal möchten Sie Ressourcen – zum Beispiel Bilder, HTML, CSS oder JavaScript – mit Ihrer Erweiterung paketieren und sie Webseiten und anderen Erweiterungen zugänglich machen.
Hinweis: Bis Firefox 105 konnten Erweiterungen standardmäßig auf Ressourcen zugreifen, die in anderen Erweiterungen gepackt sind. Ab Firefox 105 müssen Erweiterungen, um auf die Ressourcen einer anderen Erweiterung zugreifen zu können, in diesem Schlüssel eingeschlossen werden.
Zum Beispiel ersetzt die Beastify-Beispielerweiterung eine Webseite mit einem von der Nutzerin oder dem Nutzer ausgewählten Bild eines Biests. Die Biest-Bilder sind in der Erweiterung enthalten. Um das ausgewählte Bild sichtbar zu machen, fügt die Erweiterung <img>
-Elemente hinzu, deren src
-Attribut auf das Bild des Biests verweist. Damit die Webseite die Bilder laden kann, müssen sie webbasiert zugänglich gemacht werden.
Mit dem Schlüssel web_accessible_resources
können Sie alle gepackten Ressourcen auflisten, die Sie Webseiten zugänglich machen möchten. Sie geben sie als Pfade relativ zur manifest.json-Datei an.
Beachten Sie, dass Content-Skripte nicht als webbasierte Ressourcen aufgelistet werden müssen.
Wenn eine Erweiterung webRequest
oder declarativeNetRequest
verwenden möchte, um eine öffentliche URL (z.B. HTTPS) auf eine in der Erweiterung gepackte Seite umzuleiten, dann muss die Erweiterung die Seite im Schlüssel web_accessible_resources
auflisten.
Syntax Manifest V2
In Manifest V2 werden webbasierte Ressourcen als Array unter dem Schlüssel hinzugefügt, wie folgt:
"web_accessible_resources": [
"images/my-image.png"
]
Syntax Manifest V3
In Manifest V3 ist der Schlüssel web_accessible_resources
ein Array von Objekten, wie folgt:
{
// …
"web_accessible_resources": [
{
"resources": ["test1.png", "test2.png"],
"matches": ["https://web-accessible-resources-1.glitch.me/*"]
},
{
"resources": ["test3.png", "test4.png"],
"matches": ["https://web-accessible-resources-2.glitch.me/*"],
"use_dynamic_url": true
}
]
// …
}
Jedes Objekt muss eine "resources"
-Eigenschaft und entweder eine "matches"
- oder "extension_ids"
-Eigenschaft aus den folgenden Eigenschaften enthalten:
Name | Typ | Beschreibung |
---|---|---|
extension_ids
|
Array von String |
Optional. Standardwert ist [] , was bedeutet, dass andere Erweiterungen nicht auf die Ressource zugreifen können.
Eine Liste von Erweiterungs-IDs, die die Erweiterungen angibt, die auf die Ressourcen zugreifen dürfen. "*" entspricht allen Erweiterungen. |
matches |
Array von String |
Optional. Standardwert ist [] , was bedeutet, dass andere Webseiten nicht auf die Ressource zugreifen können.
Eine Liste von URL-Match-Mustern, die die Seiten spezifizieren, die auf die Ressourcen zugreifen können. Nur der Ursprung wird verwendet, um URLs zu vergleichen. Allerdings:
|
resources |
Array von String |
Ein Array von Ressourcen, die freigegeben werden sollen. Ressourcen werden als Strings spezifiziert und können * für Platzhalterabgleiche enthalten. Zum Beispiel macht "/images/*" alles im Verzeichnis /images der Erweiterung rekursiv verfügbar, während "*.png" alle PNG-Dateien freigibt.
|
use_dynamic_url |
Boolean |
Optional. Standardwert ist false .
Ob Ressourcen über die dynamische ID zugänglich gemacht werden sollen. Die dynamische ID wird pro Sitzung generiert und bei jedem Neustart des Browsers oder Neuladen der Erweiterung neu generiert. |
Verwendung von web_accessible_resources
Angenommen, Ihre Erweiterung enthält eine Bilddatei unter images/my-image.png
, wie folgt:
my-extension-files/ manifest.json my-background-script.js images/ my-image.png
Um einer Webseite zu ermöglichen, ein <img>
-Element zu verwenden, dessen src
-Attribut auf dieses Bild verweist, würden Sie web_accessible_resources
wie folgt spezifizieren:
"web_accessible_resources": ["images/my-image.png"]
Die Datei ist dann unter Verwendung einer URL wie folgt verfügbar:
moz-extension://<extension-UUID>/images/my-image.png"
<extension-UUID>
ist nicht die ID Ihrer Erweiterung. Diese ID wird zufällig für jede Instanz des Browsers generiert. Dadurch wird verhindert, dass Webseiten einen Browser über die installierten Erweiterungen fingerabdrucken.
Hinweis:
In Chrome in Manifest V2 ist die ID einer Erweiterung fest. Wenn eine Ressource in web_accessible_resources
aufgelistet ist, ist sie als chrome-extension://<your-extension-id>/<path/to/resource>
zugänglich. In Manifest V3 kann Chrome eine dynamische URL verwenden, indem use_dynamic_url
auf true
gesetzt wird.
Der empfohlene Ansatz, um die URL der Ressource zu erhalten, ist die Verwendung von runtime.getURL
, wobei der Pfad relativ zur manifest.json übergeben wird, zum Beispiel:
browser.runtime.getURL("images/my-image.png");
// something like:
// moz-extension://944cfddf-7a95-3c47-bd9a-663b3ce8d699/images/my-image.png
Dieser Ansatz liefert Ihnen die korrekte URL unabhängig vom Browser, auf dem Ihre Erweiterung läuft.
Platzhalter
Einträge in web_accessible_resources
können Platzhalter enthalten. Zum Beispiel würde der folgende Eintrag ebenfalls funktionieren, um die Ressource bei "images/my-image.png" einzuschließen:
"web_accessible_resources": ["images/*.png"]
Sicherheit
Wenn Sie eine Seite webbasiert zugänglich machen, kann jede Webseite auf diese Seite verlinken oder umleiten. Die Seite sollte dann jede Eingabe (zum Beispiel POST-Daten) so behandeln, als kämen sie von einer nicht vertrauenswürdigen Quelle, genau wie eine normale Webseite.
Webbasierte Erweiterungsressourcen werden nicht durch CORS oder CSP blockiert. Aufgrund dieser Fähigkeit, Sicherheitschecks zu umgehen, sollten Erweiterungen nach Möglichkeit die Verwendung von webbasierten Skripten vermeiden. Ein webbasiertes Erweiterungsskript kann unerwartet von böswilligen Webseiten missbraucht werden, um die Sicherheit anderer Webseiten zu schwächen. Befolgen Sie die Best Practices zur Sicherheit, indem Sie die Injektion von moz-extension:-URLs in Webseiten vermeiden und sicherstellen, dass Drittanbieter-Bibliotheken auf dem neuesten Stand sind.
Beispiel
Manifest V2 Beispiel
"web_accessible_resources": ["images/my-image.png"]
Machen Sie die Datei bei "images/my-image.png" webbasiert zugänglich für jede Webseite und Erweiterung.
Manifest V3 Beispiel
"web_accessible_resources": [
{
"resources": [ "images/my-image.png" ],
"extension_ids": ["*"],
"matches": [ "*://*/*" ]
}
]
Machen Sie die Datei bei "images/my-image.png" webbasiert zugänglich für jede Webseite und Erweiterung.
Es wird empfohlen, nur extension_ids
oder matches
zu spezifizieren, wenn nötig. Zum Beispiel, wenn die Ressource nur für Webseiten bei example.com zugänglich sein muss:
"web_accessible_resources": [
{
"resources": [ "images/my-image.png" ],
"matches": [ "https://example.com/*" ]
}
]