Nutzersteuerung für Hostberechtigungen: Umstellungsleitfaden

Zusammenfassung

Was ändert sich?

Ab Chrome 70 haben Nutzer die Möglichkeit, den Zugriff des Erweiterungshosts auf eine benutzerdefinierte Liste von Websites einzuschränken oder Erweiterungen so zu konfigurieren, dass ein Klick erforderlich ist, um auf die aktuelle Seite zuzugreifen.

Welche APIs sind betroffen?

Diese Änderung betrifft alle APIs, die von den Hostberechtigungen betroffen sind, die im Manifest Ihrer Erweiterung angegeben sind, sowie Inhaltsskripts. Zu den APIs, für die Hostberechtigungen erforderlich sind, gehören webRequest, cookies, tabs.executeScript() und tabs.insertCSS() sowie ursprungsübergreifende Anfragen, z. B. über XMLHTTPRequest oder die fetch() API.

Zugriff einschränken

Wie kann der Nutzer den Zugriff einschränken?

Nutzer können festlegen, ob die Erweiterung bei einem Klick, auf einer bestimmten Gruppe von Websites oder auf allen angeforderten Websites ausgeführt werden soll. Diese Optionen werden Nutzern auf der Seite chrome://extensions und im Kontextmenü der Erweiterung angezeigt.

Screenshot der Kontextmenüsteuerelemente für Laufzeithostberechtigungen, einschließlich Optionen zum Ausführen der Erweiterung bei einem Klick, auf einer bestimmten Website oder auf allen Websites.

Was passiert, wenn ein Nutzer meine Erweiterung „bei Klick“ ausführt?

Die Erweiterung verhält sich im Wesentlichen so, als würde die Berechtigung activeTab verwendet. Die Erweiterung erhält temporären Zugriff auf jeden Host, auf den der Nutzer auf die Erweiterung klickt, wenn dieser Host von der Erweiterung angefordert wurde und es sich nicht um eine eingeschränkte Website wie chrome://settings handelt. Wenn die Ausführung bei Klick festgelegt ist, kennzeichnet Chrome Ihre Erweiterung mit einem Kreis und einem Schlagschatten (siehe unten), um anzuzeigen, dass Zugriff auf eine bestimmte Website angefordert wird.

Screenshot des Chrome-Logos, das dem Erweiterungssymbol in der Symbolleiste hinzugefügt wird

Was passiert, wenn ein Nutzer meine Erweiterung auf bestimmten Websites ausführt?

Ihre Erweiterung darf automatisch auf allen vom Nutzer ausgewählten Websites ausgeführt werden und kann ohne weitere Aktionen des Nutzers auf die Website zugreifen. Auf anderen Websites, die von der Erweiterung angefordert wurden, denen der Nutzer jedoch keine Berechtigung erteilt hat, verhält sich das Verhalten genauso, als ob der Nutzer die Erweiterung so konfiguriert hätte, dass sie bei einem Klick ausgeführt wird.

Was passiert, wenn ein Nutzer meine Erweiterung auf allen Websites ausführt?

Die Erweiterung kann automatisch auf alle im Manifest angeforderten Websites zugreifen.

API-Verhalten

Webanfrage-API

Die Erweiterung kann weiterhin Anfragen von Websites, auf die sie Zugriff hat, abfangen, ändern und blockieren. Bei Websites, auf die die Erweiterung keinen Zugriff hat, markiert Chrome die Erweiterung, um darauf hinzuweisen, dass sie Zugriff auf die Seite anfordert. Der Nutzer kann dann Zugriff auf die Erweiterung gewähren. Chrome fordert ihn dann auf, die Seite zu aktualisieren, damit die Erweiterung die Netzwerkanfragen abfangen kann.

Inhaltsskripte, Tabs.executeScript(), Tabs.insertCSS()

Die Erweiterung kann weiterhin Skripts und Stylesheets automatisch für alle Websites einfügen, auf die sie Zugriff hat. Bei Websites, auf die die Erweiterung keinen Zugriff hat, markiert Chrome die Erweiterung, um darauf hinzuweisen, dass die Erweiterung Zugriff auf die Seite anfordert. Der Nutzer kann dann Zugriff auf die Erweiterung gewähren. Wenn das Inhaltsskript auf „document_idle“ eingeschleust wurde, wird das Skript sofort eingefügt. Andernfalls fordert Chrome den Nutzer auf, die Seite zu aktualisieren, damit Ihre Erweiterung Skripts früher beim Seitenaufbau einfügen kann (unter „document_start“ oder „document_end“). Callbacks für die Methoden tabs.executeScript() und tabs.insertCSS() werden nur aufgerufen, wenn der Nutzer Zugriff auf die Website gewährt.

Cookies und Hintergrundseite XHR

Die Erweiterung kann weiterhin alle Cookies von Websites lesen und ändern, auf die sie Zugriff hat, und eine ursprungsübergreifende XHR ausführen. Da mit einer Erweiterungsseite kein Tab verknüpft ist, der auf die Cookies eines anderen Ursprungs oder auf XHRing eines anderen Hosts zugreift, weist Chrome die Erweiterung nicht darauf hin, dass die Erweiterung den Zugriff auf eine Website anfordert. Wenn Sie versuchen, auf ein Cookie für eine andere Website zuzugreifen oder eine ursprungsübergreifende XHR zu erstellen, wird die Fehlermeldung ausgegeben, dass das Manifest der Erweiterung die Hostberechtigung nicht enthält. In diesen Fällen empfehlen wir Ihnen, optionale Berechtigungen zu verwenden, damit der Nutzer verschiedenen Websites Laufzeitzugriff gewähren kann.

Das folgende Beispiel zeigt, wie dies für die Cookies API funktionieren kann.

Vorher:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Nachher:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Migration

Welche Best Practices gibt es, um negative Auswirkungen zu vermeiden?

Erweiterungen können die optionalen Berechtigungen, die activeTab und die declarativeContent APIs verwenden, um Best Practices zu berücksichtigen. Optionale Berechtigungen werden zur Laufzeit gewährt und ermöglichen es der Erweiterung, bestimmten Zugriff auf eine Website anzufordern. Die Berechtigung activeTab ist nicht betroffen und Erweiterungen, die sie verwenden, funktionieren weiterhin normal. Die declarativeContent API ist ein Ersatz für viele Anforderungen, um Skripts auf jeder Seite einzufügen.

Was passiert mit den Einstellungen meiner aktuellen Nutzer?

Diese Änderung wirkt sich nicht sofort auf aktuelle Berechtigungen aus, die Ihrer Erweiterung gewährt werden. Das heißt, sie funktioniert wie zuvor, es sei denn, der Nutzer ergreift Maßnahmen, um die Websites einzuschränken, auf die er zugreifen darf. In zukünftigen Versionen wird Chrome Nutzern mehr Optionen zum Anpassen von Einstellungen zur Verfügung stellen.

Wie kann ich prüfen, ob meine Erweiterung die Berechtigung zur Ausführung auf einer Website hat?

Mit der API permissions.contains() können Sie prüfen, ob Ihrer Erweiterung Zugriff auf einen bestimmten Ursprung gewährt wurde.