Aby korzystać z większości interfejsów API rozszerzeń i funkcji, musisz zadeklarować intencję rozszerzenia w polach uprawnień w pliku manifestu. Rozszerzenia mogą prosić o te kategorie uprawnień określone za pomocą odpowiednich kluczy manifestu:
"permissions"
- Zawiera elementy z listy znanych ciągów. Zmiany mogą spowodować wyświetlenie ostrzeżenia.
"optional_permissions"
- Przyznany przez użytkownika w czasie działania, a nie w momencie instalacji.
"content_scripts.matches"
- Zawiera co najmniej jeden wzorzec dopasowania, który umożliwia skryptom treści wstrzykiwanie do jednego lub większej liczby hostów. Zmiany mogą spowodować wyświetlenie ostrzeżenia.
"host_permissions"
- Zawiera co najmniej jeden wzorzec dopasowania, który daje dostęp do co najmniej jednego hosta. Zmiany mogą spowodować wyświetlenie ostrzeżenia.
"optional_host_permissions"
- Przyznany przez użytkownika w czasie działania, a nie w momencie instalacji.
Uprawnienia pomagają ograniczyć szkody powstałe w wyniku ataku złośliwego oprogramowania. Niektóre ostrzeżenia o uprawnieniach są wyświetlane użytkownikom z prośbą o zgodę przed instalacji lub w czasie działania, jak opisano w sekcji Uprawnienia z ostrzeżeniami.
Rozważ użycie opcjonalnych uprawnień w przypadku, gdy funkcje rozszerzenia pozwala użytkownikom świadomie kontrolować dostęp do zasobów i danych.
Jeśli interfejs API wymaga uprawnień, instrukcje ich zadeklarowania znajdziesz w dokumentacji. Dla przykład: Storage API.
Plik manifestu
Oto przykład sekcji uprawnień w pliku manifest:
manifest.json:
{
"name": "Permissions Extension",
...
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
"optional_permissions": [
"topSites",
],
"host_permissions": [
"https://www.developer.chrome.com/*"
],
"optional_host_permissions":[
"https://*/*",
"http://*/*"
],
...
"manifest_version": 3
}
Uprawnienia hosta
Uprawnienia hosta umożliwiają rozszerzeniom interakcję z wzorcami dopasowania adresu URL. Niektóre interfejsy API Chrome wymagają uprawnień hosta oraz własnych uprawnień interfejsu API, które są wymienione na każdej stronie referencyjnej. Oto przykłady:
- Wysyłaj żądania
fetch()
ze skryptu service worker i stron rozszerzeń. - Odczytywać poufne właściwości karty (url, tytuł i favIconUrl) oraz wysyłać do nich zapytania za pomocą interfejsu API
chrome.tabs
. - Wstrzyknij skrypt treści automatycznie.
- Monitoruj i kontroluj żądania sieciowe za pomocą interfejsu API
chrome.webRequest
. - Dostęp do plików cookie przez interfejs API
chrome.cookies
. - Przekierowuj i modyfikuj żądania oraz nagłówki odpowiedzi za pomocą interfejsu API
chrome.declarativeNetRequest
.
Uprawnienia z ostrzeżeniami
Gdy rozszerzenie wymaga wielu uprawnień i wiele z nich wyświetla się ostrzeżenia podczas instalacji, użytkownik zobaczy listę ostrzeżeń, podobnie jak w tym przykładzie:
Użytkownicy chętniej ufają rozszerzeniu, które wyświetla się z ograniczonymi ostrzeżeniami lub gdy informacje o uprawnieniach są wyjaśnione do klientów. Aby uniknąć alarmu, rozważ wdrożenie opcjonalnych uprawnień lub mniej zaawansowanego interfejsu API. ostrzeżeniami. Sprawdzone metody postępowania z ostrzeżeniami znajdziesz w artykule Ostrzeżenia o uprawnieniach. Konkretna są wymienione wraz z uprawnieniami, do których mają zastosowanie, Lista referencyjna uprawnień.
Dodawanie lub zmienianie wzorców dopasowania w polach "host_permissions"
i "content_scripts.matches"
w pliku manifestu wywoła ostrzeżenie. Więcej informacji:
Aktualizuję uprawnienia.
Zezwól na dostęp
Jeśli rozszerzenie ma działać pod adresami URL file://
lub w trybie incognito, użytkownicy muszą zezwolić mu na dostęp na stronie z informacjami o nim. Instrukcje otwierania strony z informacjami znajdziesz w sekcji Zarządzanie rozszerzeniami.
Zezwól na dostęp do adresów URL plików i stron incognito
- Kliknij prawym przyciskiem myszy ikonę rozszerzenia w Chrome.
Wybierz Zarządzaj rozszerzeniem.
Przewiń w dół, aby włączyć dostęp do adresów URL plików lub trybu incognito.
Aby sprawdzić, czy użytkownik zezwolił na dostęp, możesz wywołać metodę extension.isAllowedIncognitoAccess()
lub
extension.isAllowedFileSchemeAccess()