Webzugriffsfähige Ressourcen sind Dateien in einer Erweiterung, auf die über Webseiten oder andere Erweiterungen zugegriffen werden kann. In Erweiterungen wird diese Funktion in der Regel verwendet, um Bilder oder andere Assets bereitzustellen, die auf Webseiten geladen werden müssen. Jedes Asset, das im Bundle einer Erweiterung enthalten ist, kann jedoch für das Web freigegeben werden.
Standardmäßig sind keine Ressourcen über das Web zugänglich, da eine schädliche Website so Erweiterungen, die ein Nutzer installiert hat, fingerabdrucken oder Schwachstellen (z. B. XSS-Fehler) in installierten Erweiterungen ausnutzen könnte. Nur Seiten oder Scripts, die vom Ursprung einer Erweiterung geladen werden, können auf die Ressourcen dieser Erweiterung zugreifen.
Manifestdeklaration
Mit dem Manifestattribut web_accessible_resources
kannst du deklarieren, welche Ressourcen
welche Ursprünge sind. Diese Property ist ein Array von Objekten, in denen Regeln für den Ressourcenzugriff deklariert werden. Jedes Objekt ordnet eine Reihe von Erweiterungsressourcen einer Reihe von URLs und/oder Erweiterungs-IDs zu, die auf diese Ressourcen zugreifen können.
{
...
"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 im Array enthält die folgenden Elemente:
"resources"
- Ein Array von Strings, von denen jeder einen relativen Pfad zu einer bestimmten Ressource aus dem Stammverzeichnis der Erweiterung enthält. Ressourcen können Sternchen (
*
) für Platzhalterübereinstimmungen enthalten. Mit"/images/*"
wird beispielsweise alles imimages/
-Verzeichnis der Erweiterung rekursiv freigegeben, während mit"*.png"
alle PNG-Dateien freigegeben werden. "matches"
- Ein Array von Strings, von denen jeder ein Abgleichsmuster enthält, das angibt, welche Websites auf diese Ressourcen zugreifen können. Für den Abgleich von URLs wird nur der Ursprung verwendet. Zu den Ursprüngen gehört auch der Abgleich von Subdomains. In Google Chrome wird der Fehler „Ungültiges Abgleichsmuster“ ausgegeben, wenn das Muster einen anderen Pfad als „/*“ hat.
"extension_ids"
- Ein Array von Strings, von denen jeder die ID einer Erweiterung enthält, die auf die Ressourcen zugreifen kann.
"use_dynamic_url"
- Wenn „wahr“ festgelegt ist, ist der Zugriff auf Ressourcen nur über eine dynamische ID zulässig. Pro Sitzung wird eine dynamische ID generiert. Das bedeutet, dass es neu generiert wird, wenn der Browser neu gestartet oder die Erweiterung neu geladen wird.
Jedes Element muss ein "resources"
-Element und entweder ein "matches"
- oder ein "extension_ids"
-Element enthalten. Dadurch wird eine Zuordnung erstellt, über die die angegebenen Ressourcen entweder für Webseiten freigegeben werden, die dem Muster entsprechen, oder für Erweiterungen mit übereinstimmenden IDs. Das "use_dynamic_url"
-Element ist optional.
Nutzerfreundlichkeit von Ressourcen
Ressourcen sind auf einer Webseite über die URL chrome-extension://[PACKAGE ID]/[PATH]
verfügbar, die mit der Methode runtime.getURL()
generiert werden kann. Die Ressourcen werden mit den entsprechenden CORS-Headern bereitgestellt und sind daher über fetch()
verfügbar.
Die Navigation von einer Web-Quelle zu einer Erweiterungsressource wird blockiert, es sei denn, die Ressource ist als webzugänglich aufgeführt. Beachten Sie folgende Sonderfälle:
- Wenn eine Erweiterung die webRequest API verwendet, um eine Anfrage für eine öffentliche Ressource an eine Ressource weiterzuleiten, die nicht über das Web zugänglich ist, wird diese Anfrage ebenfalls blockiert.
- Das gilt auch, wenn die nicht über das Web zugängliche Ressource der Weiterleitungserweiterung gehört.
- Die Navigation ist im Inkognitomodus blockiert, es sei denn, der Wert des Felds
"incognito"
ist auf"split"
gesetzt.
Content-Skripts selbst müssen nicht zulässig sein.
Beispiel
Im Beispiel Webzugängliche Ressourcen wird die Verwendung dieses Elements in einer funktionierenden Erweiterung veranschaulicht.