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_permissions
lubpermissions
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.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ść lubtabId
. -
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ść 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
-
żą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
-
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
-
callback
funkcja
Parametr
callback
wyglą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
-
callback
funkcja
Parametr
callback
wygląda tak:(permissions: Permissions) => void
-
uprawnienia
-