Gebruikersinstellingen voor hostmachtigingen: transitiegids

Samenvatting

Wat verandert er?

Vanaf Chrome 70 hebben gebruikers de mogelijkheid om de toegang van de extensiehost te beperken tot een aangepaste lijst met sites, of om extensies zo te configureren dat een klik nodig is om toegang te krijgen tot de huidige pagina.

Welke API's worden getroffen?

Deze wijziging is van invloed op alle API's die worden beïnvloed door de hostmachtigingen die zijn opgegeven in het manifest van uw extensie, evenals op inhoudsscripts. API's waarvoor hostmachtigingen nodig zijn, zijn onder meer webRequest , cookies , tabs.executeScript() en tabs.insertCSS() en het uitvoeren van cross-origin-verzoeken, zoals via een XMLHTTPRequest of de fetch() API.

Toegang beperken

Hoe kan de gebruiker de toegang beperken?

Gebruikers kunnen ervoor kiezen om toe te staan ​​dat uw extensie wordt uitgevoerd bij klikken, op een specifieke reeks sites of op alle aangevraagde sites. Deze opties worden aan gebruikers gepresenteerd op de chrome://extensions pagina en in het contextmenu van de extensie.

Een screenshot van de contextmenuknoppen voor runtimehostmachtigingen, inclusief opties om de extensie uit te voeren bij klikken, op een specifieke site of op alle sites.

Wat gebeurt er als een gebruiker ervoor kiest mijn extensie 'on click' uit te voeren?

De extensie gedraagt ​​zich in wezen alsof deze de activeTab- machtiging gebruikt. De extensie krijgt tijdelijke toegang tot elke host waarop de gebruiker op de extensie klikt, als die host door de extensie is aangevraagd (en geen beperkte site is, zoals chrome://settings). Als Chrome is ingesteld om te worden uitgevoerd bij klikken, wordt uw extensie voorzien van een cirkel en een slagschaduw (zie hieronder) om aan te geven dat er toegang wordt gevraagd tot een bepaalde site.

Een screenshot van de badge die Chrome toevoegt aan het extensiepictogram in de werkbalk

Wat gebeurt er als een gebruiker ervoor kiest mijn extensie op specifieke sites uit te voeren?

Uw extensie mag automatisch worden uitgevoerd op alle sites die de gebruiker heeft gekozen, en heeft toegang tot de site zonder verdere actie van de gebruiker. Op andere sites waar uw extensie om heeft gevraagd, maar waarvoor de gebruiker geen toestemming heeft verleend, is het gedrag hetzelfde alsof de gebruiker de extensie zo had ingesteld dat deze wordt uitgevoerd bij klikken.

Wat gebeurt er als een gebruiker ervoor kiest mijn extensie op alle sites uit te voeren?

De extensie heeft automatisch toegang tot alle sites die in het manifest worden aangevraagd.

API-gedrag

API voor webverzoeken

De extensie kan nog steeds alle verzoeken van sites waartoe deze toegang heeft, onderscheppen, wijzigen en blokkeren. Voor sites waartoe de extensie geen toegang heeft, geeft Chrome een badge aan de extensie om aan te geven dat de extensie toegang tot de pagina vraagt. De gebruiker kan vervolgens toegang verlenen tot de extensie; Chrome vraagt ​​de gebruiker vervolgens de pagina te vernieuwen, zodat uw extensie de netwerkverzoeken kan onderscheppen.

Inhoudsscripts, tabs.executeScript(), tabs.insertCSS()

De extensie kan nog steeds automatisch scripts en stijlbladen injecteren voor alle sites waartoe deze toegang heeft. Voor sites waartoe de extensie geen toegang heeft, geeft Chrome een badge aan de extensie om aan te geven dat de extensie toegang tot de pagina vraagt. De gebruiker kan vervolgens toegang verlenen tot de extensie. Als het inhoudsscript is ingesteld om te injecteren op document_idle, wordt het script onmiddellijk geïnjecteerd. Anders vraagt ​​Chrome de gebruiker de pagina te vernieuwen, zodat uw extensie eerder scripts kan injecteren tijdens het laden van de pagina (bij document_start of document_end). De callbacks voor de methoden tabs.executeScript() en tabs.insertCSS() worden alleen aangeroepen als de gebruiker toegang tot de site verleent.

Cookies en achtergrondpagina XHR

De extensie kan nog steeds cookies lezen en wijzigen van en een cross-origin XHR uitvoeren op sites waartoe het toegang heeft. Omdat er geen tabblad is gekoppeld aan een extensiepagina die toegang heeft tot de cookies van een andere oorsprong of XHRing naar een andere host, geeft Chrome de extensie geen badge om aan de gebruiker aan te geven dat de extensie vraagt ​​om toegang tot een site. Als u probeert toegang te krijgen tot een cookie voor een andere site of een cross-origin XHR te maken, mislukt dit met een foutmelding alsof het manifest van de extensie niet de hosttoestemming bevatte. In deze gevallen raden we u aan optionele machtigingen te gebruiken, zodat de gebruiker runtime-toegang tot verschillende sites kan verlenen.

Het onderstaande voorbeeld illustreert hoe dit kan werken voor de cookies-API.

Voor:

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

Na:

{
  ...
  "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
      }
    });

Migratie

Wat zijn best practices om negatieve gevolgen te voorkomen?

Extensies kunnen de optionele machtigingen , activeTab en declarativeContent API's gebruiken om best practices te volgen. Optionele machtigingen worden tijdens runtime verleend en zorgen ervoor dat de extensie specifieke toegang tot een site kan aanvragen. De activeTab- machtiging wordt niet beïnvloed en extensies die hiervan gebruikmaken, blijven normaal werken. De declarativeContent API vervangt veel behoeften om scripts in elke pagina te injecteren.

Wat gebeurt er met de instellingen van mijn huidige gebruikers?

Deze wijziging heeft niet onmiddellijk invloed op de huidige machtigingen die aan uw extensie zijn verleend. Dat wil zeggen dat het blijft werken zoals voorheen, tenzij de gebruiker actie onderneemt om de sites waartoe hij toegang heeft te beperken. In toekomstige releases zal Chrome gebruikers meer mogelijkheden bieden om instellingen aan te passen.

Hoe kan ik controleren of mijn extensie toestemming heeft om op een site te draaien?

U kunt de API permissions.contains() gebruiken om te controleren of uw extensie toegang heeft gekregen tot een bepaalde oorsprong.