chrome.permissions

Opis

Używaj interfejsu chrome.permissions API, aby prosić o zadeklarowane uprawnienia opcjonalne w czasie działania aplikacji, a nie w czasie instalacji. Dzięki temu użytkownicy będą rozumieć, dlaczego aplikacja potrzebuje tych uprawnień, i przyznawać tylko te, które są niezbędne.

Pojęcia i zastosowanie

Ostrzeżenia o uprawnieniach opisują możliwości przyznane przez interfejs API, ale niektóre z nich mogą być nieoczywiste. Interfejs Permissions API umożliwia deweloperom wyjaśnianie ostrzeżeń dotyczących uprawnień i stopniowe wprowadzanie nowych funkcji, dzięki czemu użytkownicy mogą bez ryzyka zapoznać się z rozszerzeniem. Dzięki temu użytkownicy mogą określić, jaki zakres dostępu chcą przyznać i które funkcje chcą włączyć.

Na przykład podstawową funkcją rozszerzenia z opcjonalnymi uprawnieniami jest zastępowanie strony nowej karty. Jedną z funkcji jest wyświetlanie celu użytkownika na dany dzień. Ta funkcja wymaga tylko uprawnienia pamięć, które nie obejmuje ostrzeżenia. Rozszerzenie ma dodatkową funkcję, którą użytkownicy mogą włączyć, klikając ten przycisk:

Przycisk rozszerzenia, który umożliwia korzystanie z dodatkowych funkcji.
Przycisk rozszerzenia, który włącza dodatkowe funkcje.

Wyświetlanie najpopularniejszych witryn użytkownika wymaga uprawnienia topSites, które wiąże się z tym ostrzeżeniem:

Ostrzeżenie dotyczące rozszerzenia w przypadku interfejsu API topSites.
Ostrzeżenie o rozszerzeniu interfejsu topSites API

Wdrażanie opcjonalnych uprawnień

Krok 1. Określ, które uprawnienia są wymagane, a które opcjonalne

Rozszerzenie może deklarować zarówno wymagane, jak i opcjonalne uprawnienia. Ogólnie rzecz biorąc, wykonaj te czynności:

  • Używaj wymaganych uprawnień, gdy są one potrzebne do podstawowego działania rozszerzenia.
  • Używaj opcjonalnych uprawnień, gdy są one potrzebne do opcjonalnych funkcji w rozszerzeniu.

Zalety uprawnień wymaganych:

  • Mniej próśb: rozszerzenie może poprosić użytkownika o zaakceptowanie wszystkich uprawnień tylko raz.
  • Prostsze tworzenie: wymagane uprawnienia są zawsze dostępne.

Zalety uprawnień opcjonalnych:

  • Większe bezpieczeństwo: rozszerzenia działają z mniejszą liczbą uprawnień, ponieważ użytkownicy włączają tylko te, które są potrzebne.
  • Lepsze informacje dla użytkowników: rozszerzenie może wyjaśnić, dlaczego potrzebuje określonego uprawnienia, gdy użytkownik włączy odpowiednią funkcję.
  • Łatwiejsze uaktualnianie: gdy uaktualnisz rozszerzenie, Chrome nie wyłączy go użytkownikom, jeśli uaktualnienie doda uprawnienia opcjonalne, a nie wymagane.

Krok 2. Zadeklaruj opcjonalne uprawnienia w pliku manifestu

Zadeklaruj opcjonalne uprawnienia w pliku manifestu rozszerzenia za pomocą klucza optional_permissions w tym samym formacie co pole permissions:

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

Jeśli chcesz wysyłać żądania do hostów, które są wykrywane tylko w czasie działania, w polu optional_host_permissions rozszerzenia umieść "https://*/*". Dzięki temu możesz określić dowolne źródło w "Permissions.origins", o ile ma ono pasujący schemat.

Uprawnienia, których nie można określić jako opcjonalne

Większość uprawnień rozszerzeń do Chrome można określić jako opcjonalne, z wyjątkiem tych:

Uprawnienie Opis
"debugger" Interfejs chrome.debugger służy jako alternatywny transport dla protokołu zdalnego debugowania w Chrome.
"declarativeNetRequest" Przyznaje rozszerzeniu dostęp do interfejsu chrome.declarativeNetRequest API.
"devtools" Umożliwia rozszerzeniu rozszerzanie funkcji Narzędzi deweloperskich w Chrome.
"geolocation" Umożliwia rozszerzeniu korzystanie z interfejsu HTML5 geolokalizacji.
"mdns" Przyznaje rozszerzeniu dostęp do interfejsu chrome.mdns API.
"proxy" Umożliwia rozszerzeniu dostęp do interfejsu chrome.proxy, aby zarządzać ustawieniami serwera proxy Chrome.
"tts" Interfejs chrome.tts odtwarza zsyntetyzowany tekst w formie mowy.
"ttsEngine" Interfejs chrome.ttsEngine implementuje silnik zamiany tekstu na mowę (TTS) za pomocą rozszerzenia.
"wallpaper" Tylko ChromeOS Użyj interfejsu chrome.wallpaper API, aby zmienić tapetę w ChromeOS.

Więcej informacji o dostępnych uprawnieniach i ostrzeżeniach z nimi związanych znajdziesz w artykule Deklarowanie uprawnień.

Krok 3. Poproś o uprawnienia opcjonalne

Poproś o uprawnienia w ramach gestu użytkownika za pomocą funkcji 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 wyświetla użytkownikowi prośbę o potwierdzenie, jeśli dodanie uprawnień powoduje wyświetlenie innych komunikatów ostrzegawczych niż te, które użytkownik już widział i zaakceptował. Na przykład poprzedni kod może spowodować wyświetlenie takiego promptu:

Przykładowa prośba o potwierdzenie uprawnień.
Przykładowy komunikat z prośbą o potwierdzenie uprawnień.

Krok 4. Sprawdź bieżące uprawnienia rozszerzenia

Aby sprawdzić, czy rozszerzenie ma określone uprawnienie lub zestaw uprawnień, użyj tego kodu: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.
  }
});

Krok 5. Usuń uprawnienia

Gdy nie będziesz już potrzebować uprawnień, usuń je. Po usunięciu uprawnienia wywołanie funkcji permissions.request() zwykle powoduje ponowne dodanie uprawnienia bez wyświetlania użytkownikowi odpowiedniego komunikatu.

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

Typy

Permissions

Właściwości

  • źródła,

    string[] opcjonalne

    Lista uprawnień do hosta, w tym uprawnień określonych w kluczach optional_permissions lub permissions w pliku manifestu oraz uprawnień powiązanych ze skryptami treści.

  • uprawnienia

    string[] opcjonalne

    Lista nazwanych uprawnień (nie obejmuje hostów ani źródeł).

Metody

addHostAccessRequest()

Chrome 133 lub nowszy MV3 lub nowszy
chrome.permissions.addHostAccessRequest(
  request: object,
)
: Promise<void>

Dodaje prośbę o dostęp do hosta. Prośba zostanie wyświetlona użytkownikowi tylko wtedy, gdy rozszerzenie może uzyskać dostęp do hosta w prośbie. Żądanie zostanie zresetowane podczas nawigacji między domenami. Po zaakceptowaniu przyznaje trwały dostęp do głównego źródła witryny.

Parametry

  • żądanie

    obiekt

    • documentId

      string opcjonalny

      Identyfikator dokumentu, w którym mogą być wyświetlane prośby o dostęp do hosta. Musi to być dokument najwyższego poziomu na karcie. Jeśli zostanie podana, prośba jest wyświetlana na karcie określonego dokumentu i usuwana, gdy dokument przechodzi do nowego źródła. Dodanie nowego żądania spowoduje zastąpienie dotychczasowego żądania dotyczącego tabId. Należy określić tę wartość lub tabId.

    • wzór

      string opcjonalny

      Wzorzec adresu URL, w którym mogą być wyświetlane prośby o dostęp do hosta. Jeśli podasz ten wzorzec, prośby o dostęp do hosta będą wyświetlane tylko w przypadku adresów URL, które do niego pasują.

    • tabId

      number opcjonalny

      Identyfikator karty, na której mogą być wyświetlane prośby o dostęp do hosta. Jeśli zostanie podany, żądanie będzie wyświetlane na określonej karcie i zostanie usunięte, gdy karta przejdzie do nowej domeny. Dodanie nowej prośby spowoduje zastąpienie istniejącej prośby o documentId. Należy określić tę wartość lub documentId.

Zwroty

  • Promise<void>

contains()

chrome.permissions.contains(
  permissions: Permissions,
)
: Promise<boolean>

Sprawdza, czy rozszerzenie ma określone uprawnienia.

Parametry

Zwroty

  • Promise<boolean>

    Chrome w wersji 96 lub nowszej

getAll()

chrome.permissions.getAll(): Promise<Permissions>

Pobiera bieżący zestaw uprawnień rozszerzenia.

Zwroty

remove()

chrome.permissions.remove(
  permissions: Permissions,
)
: Promise<boolean>

Usuwa dostęp do określonych uprawnień. Jeśli wystąpią problemy z usunięciem uprawnień, zostanie ustawiona wartość runtime.lastError.

Parametry

Zwroty

  • Promise<boolean>

    Chrome w wersji 96 lub nowszej

removeHostAccessRequest()

Chrome 133 lub nowszy MV3 lub nowszy
chrome.permissions.removeHostAccessRequest(
  request: object,
)
: Promise<void>

Usuwa prośbę o dostęp hosta, jeśli taka istnieje.

Parametry

  • żądanie

    obiekt

    • documentId

      string opcjonalny

      Identyfikator dokumentu, z którego zostanie usunięta prośba o dostęp do hosta. Musi to być dokument najwyższego poziomu na karcie. Należy określić tę wartość lub tabId.

    • wzór

      string opcjonalny

      Wzorzec adresu URL, z którego zostanie usunięta prośba o dostęp hosta. Jeśli zostanie podana, musi dokładnie odpowiadać wzorcowi istniejącego żądania dostępu do hosta.

    • tabId

      number opcjonalny

      Identyfikator karty, z której zostanie usunięta prośba o dostęp do hosta. Należy określić tę wartość lub documentId.

Zwroty

  • Promise<void>

request()

chrome.permissions.request(
  permissions: Permissions,
)
: Promise<boolean>

Prosi o dostęp do określonych uprawnień, a w razie potrzeby wyświetla prośbę do użytkownika. Te uprawnienia muszą być zdefiniowane w polu optional_permissions pliku manifestu lub być wymaganymi uprawnieniami, które zostały odrzucone przez użytkownika. Ścieżki we wzorcach źródła będą ignorowane. Możesz poprosić o podzbiory opcjonalnych uprawnień dotyczących punktu początkowego. Jeśli na przykład w sekcji optional_permissions pliku manifestu określisz *://*\/*, możesz poprosić o http://example.com/. Jeśli podczas wysyłania prośby o uprawnienia wystąpią problemy, zostanie ustawiona wartość runtime.lastError.

Parametry

Zwroty

  • Promise<boolean>

    Chrome w wersji 96 lub nowszej

Wydarzenia

onAdded

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

Uruchamiane, gdy rozszerzenie uzyskuje nowe uprawnienia.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (permissions: Permissions) => void

onRemoved

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

Wywoływane, gdy dostęp do uprawnień został usunięty z rozszerzenia.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (permissions: Permissions) => void