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:
 
  Wyświetlanie najpopularniejszych witryn użytkownika wymaga uprawnienia topSites, które wiąże się z tym ostrzeżeniem:
 
  topSites APIWdraż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:
 
  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_permissionslubpermissionsw pliku manifestu oraz uprawnień powiązanych ze skryptami treści.
- 
    uprawnieniastring[] opcjonalne Lista nazwanych uprawnień (nie obejmuje hostów ani źródeł). 
Metody
addHostAccessRequest()
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
- 
    żądanieobiekt - 
    documentIdstring 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ść lubtabId.
- 
    wzórstring 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ą. 
- 
    tabIdnumber 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ść lubdocumentId.
 
- 
    
Zwroty
- 
            Promise<void> 
contains()
chrome.permissions.contains(
permissions: Permissions,
): Promise<boolean>
Sprawdza, czy rozszerzenie ma określone uprawnienia.
Parametry
- 
    uprawnienia
Zwroty
- 
            Promise<boolean> Chrome w wersji 96 lub nowszej
getAll()
chrome.permissions.getAll(): Promise<Permissions>
Pobiera bieżący zestaw uprawnień rozszerzenia.
Zwroty
- 
            Promise<Permissions> Chrome w wersji 96 lub nowszej
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
- 
    uprawnienia
Zwroty
- 
            Promise<boolean> Chrome w wersji 96 lub nowszej
removeHostAccessRequest()
chrome.permissions.removeHostAccessRequest(
request: object,
): Promise<void>
Usuwa prośbę o dostęp hosta, jeśli taka istnieje.
Parametry
- 
    żądanieobiekt - 
    documentIdstring 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órstring 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. 
- 
    tabIdnumber 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
- 
    uprawnienia
Zwroty
- 
            Promise<boolean> Chrome w wersji 96 lub nowszej
Wydarzenia
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
Uruchamiane, gdy rozszerzenie uzyskuje nowe uprawnienia.
Parametry
- 
    callbackfunkcja Parametr callbackwygląda tak:(permissions: Permissions) => void - 
    uprawnienia
 
- 
    
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
Wywoływane, gdy dostęp do uprawnień został usunięty z rozszerzenia.
Parametry
- 
    callbackfunkcja Parametr callbackwygląda tak:(permissions: Permissions) => void - 
    uprawnienia
 
-