chrome.permissions

Descrizione

Utilizza l'API chrome.permissions per richiedere le autorizzazioni facoltative dichiarate in fase di runtime anziché in fase di installazione, in modo che gli utenti comprendano perché sono necessarie le autorizzazioni e concedano solo quelle necessarie.

Panoramica

Gli avvisi relativi alle autorizzazioni esistono per descrivere le funzionalità concesse da un'API, ma alcuni di questi avvisi potrebbero non essere ovvi. L'API Permissions consente agli sviluppatori di spiegare gli avvisi relativi alle autorizzazioni e di introdurre gradualmente nuove funzionalità, offrendo agli utenti un'introduzione all'estensione senza rischi. In questo modo, gli utenti possono specificare il livello di accesso che sono disposti a concedere e le funzionalità che vogliono attivare.

Ad esempio, la funzionalità principale dell'estensione delle autorizzazioni facoltative è la sostituzione della pagina Nuova scheda. Una funzionalità è la visualizzazione dell'obiettivo giornaliero dell'utente. Questa funzionalità richiede solo l'autorizzazione Archiviazione, che non include un avviso. L'estensione ha una funzionalità aggiuntiva che gli utenti possono attivare facendo clic sul seguente pulsante:

Pulsante di estensione che attiva funzionalità aggiuntive

La visualizzazione dei siti principali dell'utente richiede l'autorizzazione topSites, che presenta il seguente avviso.

Avviso di estensione per l'API topSites

Implementazione delle autorizzazioni facoltative

Passaggio 1: decidi quali autorizzazioni sono obbligatorie e quali sono facoltative

Un'estensione può dichiarare autorizzazioni obbligatorie e facoltative. In generale, devi:

  • Utilizza le autorizzazioni richieste quando sono necessarie per la funzionalità di base dell'estensione.
  • Utilizza le autorizzazioni facoltative quando sono necessarie per le funzionalità facoltative dell'estensione.

Vantaggi delle autorizzazioni obbligatorie:

  • Meno prompt:un'estensione può chiedere all'utente di accettare tutte le autorizzazioni una sola volta.
  • Sviluppo più semplice:è garantita la presenza delle autorizzazioni richieste.

Vantaggi delle autorizzazioni facoltative:

  • Maggiore sicurezza:le estensioni vengono eseguite con meno autorizzazioni, in quanto gli utenti attivano solo quelle necessarie.
  • Informazioni migliori per gli utenti:un'estensione può spiegare perché ha bisogno di una determinata autorizzazione quando l'utente attiva la funzionalità pertinente.
  • Upgrade più semplici:quando esegui l'upgrade dell'estensione, Chrome non la disattiva per i tuoi utenti se l'upgrade aggiunge autorizzazioni facoltative anziché obbligatorie.

Passaggio 2: dichiara le autorizzazioni facoltative nel manifest

Dichiara le autorizzazioni facoltative nel manifest dell'estensione con la chiave optional_permissions, utilizzando lo stesso formato del campo permissions:

{
  "name": "My extension",
  ...
  "optional_permissions": ["tabs"],
  "optional_host_permissions": ["https://www.google.com/"],
  ...
}

Se vuoi richiedere host che scopri solo in fase di runtime, includi "https://*/*" nel campo optional_host_permissions dell'estensione. Ciò ti consente di specificare qualsiasi origine in Permissions.origins, purché abbia uno schema corrispondente.

Autorizzazioni che non possono essere specificate come facoltative

La maggior parte delle autorizzazioni delle estensioni di Chrome può essere specificata come facoltativa, con le seguenti eccezioni.

Autorizzazione Descrizione
"debugger" L'API chrome.debugger funge da trasporto alternativo per il protocollo di debug remoto di Chrome.
"declarativeNetRequest" Concede all'estensione l'accesso all'API chrome.declarativeNetRequest.
"devtools" Consente all'estensione di espandere la funzionalità di Chrome DevTools.
"experimental" Canale Canary e canale Dev solo. Concede all'estensione l'accesso alle API chrome.experimental.
"geolocation" Consente all'estensione di utilizzare l'API Geolocation HTML5.
"mdns" Concede all'estensione l'accesso all'API chrome.mdns.
"proxy" Concede all'estensione l'accesso all'API chrome.proxy per gestire le impostazioni proxy di Chrome.
"tts" L'API chrome.tts riproduce la sintesi vocale.
"ttsEngine" L'API chrome.ttsEngine implementa un motore di sintesi vocale (TTS) utilizzando un'estensione.
"wallpaper" Solo ChromeOS. Utilizza l'API chrome.wallpaper per cambiare lo sfondo di ChromeOS.

Per ulteriori informazioni sulle autorizzazioni disponibili e sui relativi avvisi, consulta Dichiarare le autorizzazioni e avvisare gli utenti.

Passaggio 3: richiedi le autorizzazioni facoltative

Richiedi le autorizzazioni dall'interno di un gesto dell'utente utilizzando permissions.request():

document.querySelector('#my-button').addEventListener('click', (event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request({
    permissions: ['tabs'],
    origins: ['https://www.google.com/']
  }, (granted) => {
    // The callback argument will be true if the user granted the permissions.
    if (granted) {
      doSomething();
    } else {
      doSomethingElse();
    }
  });
});

Chrome chiede all'utente se l'aggiunta delle autorizzazioni genera messaggi di avviso diversi da quelli che l'utente ha già visto e accettato. Ad esempio, il codice precedente potrebbe generare un prompt come questo:

esempio di prompt di conferma dell'autorizzazione

Passaggio 4: controlla le autorizzazioni attuali dell'estensione

Per verificare se la tua estensione dispone di un'autorizzazione o di un insieme di autorizzazioni specifiche, utilizza permission.contains():

chrome.permissions.contains({
  permissions: ['tabs'],
  origins: ['https://www.google.com/']
}, (result) => {
  if (result) {
    // The extension has the permissions.
  } else {
    // The extension doesn't have the permissions.
  }
});

Passaggio 5: rimuovi le autorizzazioni

Devi rimuovere le autorizzazioni quando non ti servono più. Dopo la rimozione di un'autorizzazione, la chiamata a permissions.request() di solito aggiunge di nuovo l'autorizzazione senza chiedere all'utente.

chrome.permissions.remove({
  permissions: ['tabs'],
  origins: ['https://www.google.com/']
}, (removed) => {
  if (removed) {
    // The permissions have been removed.
  } else {
    // The permissions have not been removed (e.g., you tried to remove
    // required permissions).
  }
});

Tipi

Permissions

Proprietà

  • origini

    string[] facoltativo

    L'elenco delle autorizzazioni host, incluse quelle specificate nelle chiavi optional_permissions o permissions nel manifest e quelle associate agli script dei contenuti.

  • autorizzazioni

    string[] facoltativo

    Elenco delle autorizzazioni denominate (non include host o origini).

Metodi

contains()

Promessa
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Controlla se l'estensione dispone delle autorizzazioni specificate.

Parametri

  • autorizzazioni
  • callback

    funzione facoltativa

    Il parametro callback ha il seguente aspetto:

    (result: boolean) => void

    • risultato

      booleano

      True se l'estensione dispone delle autorizzazioni specificate. Se un'origine è specificata sia come autorizzazione facoltativa sia come pattern di corrispondenza dello script dei contenuti, verrà restituito false a meno che non vengano concesse entrambe le autorizzazioni.

Resi

  • Promise<boolean>

    Chrome 96+

    Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback.

getAll()

Promessa
chrome.permissions.getAll(
  callback?: function,
)
: Promise<Permissions>

Recupera l'insieme corrente di autorizzazioni dell'estensione.

Parametri

  • callback

    funzione facoltativa

    Il parametro callback ha il seguente aspetto:

    (permissions: Permissions) => void

    • autorizzazioni

      Le autorizzazioni attive dell'estensione. Tieni presente che la proprietà origins conterrà le origini concesse da quelle specificate nelle chiavi permissions e optional_permissions nel manifest e quelle associate agli script dei contenuti.

Resi

  • Promise<Permissions>

    Chrome 96+

    Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback.

remove()

Promessa
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Rimuove l'accesso alle autorizzazioni specificate. Se si verificano problemi durante la rimozione delle autorizzazioni, verrà impostato runtime.lastError.

Parametri

  • autorizzazioni
  • callback

    funzione facoltativa

    Il parametro callback ha il seguente aspetto:

    (removed: boolean) => void

    • rimosso

      booleano

      Vero se le autorizzazioni sono state rimosse.

Resi

  • Promise<boolean>

    Chrome 96+

    Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback.

request()

Promessa
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Richiede l'accesso alle autorizzazioni specificate, mostrando una richiesta all'utente, se necessario. Queste autorizzazioni devono essere definite nel campo optional_permissions del manifest o essere autorizzazioni richieste che sono state negate dall'utente. I percorsi nei pattern di origine verranno ignorati. Puoi richiedere sottoinsiemi di autorizzazioni di origine facoltative. Ad esempio, se specifichi *://*\/* nella sezione optional_permissions del manifest, puoi richiedere http://example.com/. Se si verificano problemi durante la richiesta delle autorizzazioni, verrà impostato runtime.lastError.

Parametri

  • autorizzazioni
  • callback

    funzione facoltativa

    Il parametro callback ha il seguente aspetto:

    (granted: boolean) => void

    • granted

      booleano

      Vero se l'utente ha concesso le autorizzazioni specificate.

Resi

  • Promise<boolean>

    Chrome 96+

    Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback.

Eventi

onAdded

chrome.permissions.onAdded.addListener(
  callback: function,
)

Attivato quando l'estensione acquisisce nuove autorizzazioni.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (permissions: Permissions) => void

onRemoved

chrome.permissions.onRemoved.addListener(
  callback: function,
)

Attivato quando l'accesso alle autorizzazioni è stato rimosso dall'estensione.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (permissions: Permissions) => void