Opcje użytkownika dotyczące uprawnień hosta: przewodnik dotyczący przenoszenia kont

Podsumowanie

Co się zmienia?

Od wersji Chrome 70 użytkownicy mogą ograniczać dostęp hosta rozszerzeń do niestandardowej listy witryn lub konfigurować rozszerzenia tak, aby dostęp do bieżącej strony wymagał kliknięcia.

Których interfejsów API dotyczy problem?

Ta zmiana dotyczy wszystkich interfejsów API, na które wpływają uprawnienia hosta określone w pliku manifestu rozszerzenia, a także skrypty treści. Interfejsy API, które wymagają uprawnień hosta, to webRequest, cookies, tabs.executeScript() i tabs.insertCSS() oraz żądania z innych domen, np. XMLHTTPRequest lub fetch() API.

Ograniczam dostęp

W jaki sposób użytkownik może ograniczyć dostęp?

Użytkownicy mogą zezwolić na uruchamianie rozszerzenia po kliknięciu, w określonym zestawie witryn lub we wszystkich żądanych witrynach. Opcje te są pokazywane użytkownikom na stronie chrome://extensions oraz w menu kontekstowym rozszerzenia.

Zrzut ekranu przedstawiający menu kontekstowe uprawnień hosta w czasie działania, w tym opcje uruchamiania rozszerzenia po kliknięciu, na konkretnej stronie lub na wszystkich stronach.

Co się stanie, jeśli użytkownik zdecyduje się uruchamiać rozszerzenie „po kliknięciu”?

Rozszerzenie zachowuje się tak, jakby używało uprawnienia activeTab. Rozszerzenie uzyska tymczasowy dostęp do każdego hosta, na którym użytkownik kliknie rozszerzenie, o ile żądanie to nastąpiło (i nie jest witryną z ograniczonym dostępem, np. chrome://settings). Gdy jest włączone po kliknięciu, Chrome będzie oznaczać rozszerzenie za pomocą koła i cienia (patrz poniżej), aby wskazać, że prosi o dostęp w konkretnej witrynie.

Zrzut ekranu z plakietkami dodawanymi do ikony rozszerzenia na pasku narzędzi Chrome

Co się stanie, jeśli użytkownik uruchomi moje rozszerzenie w określonych witrynach?

Rozszerzenie może się uruchamiać automatycznie we wszystkich witrynach wybranych przez użytkownika i mieć dostęp do witryny bez żadnych dodatkowych działań ze strony użytkownika. W innych witrynach, do których rozszerzenie prosiło o udzielenie zgody, ale użytkownik ich nie udzielił, działanie rozszerzenia będzie takie samo jak w przypadku wybrania przez użytkownika ustawienia uruchamiania rozszerzenia po kliknięciu.

Co się stanie, jeśli użytkownik uruchomi moje rozszerzenie na wszystkich stronach?

Rozszerzenie ma automatycznie dostęp do wszystkich witryn żądanych w pliku manifestu.

Zachowania interfejsu API

Interfejs API żądań sieciowych

Rozszerzenie może nadal przechwytywać, modyfikować i blokować wszelkie żądania od witryn, do których ma dostęp. W przypadku witryn, do których rozszerzenie nie ma dostępu, Chrome oznacza rozszerzenie, aby pokazać, że prosi ono o dostęp do strony. Użytkownik może potem przyznać dostęp do rozszerzenia, a następnie poprosić go o odświeżenie strony, co pozwoli rozszerzeniu przechwycić żądania sieciowe.

Skrypty treści, passwords.executeScript(), Cards.insertCSS()

To rozszerzenie może nadal automatycznie wstawiać skrypty i arkusze stylów we wszystkich witrynach, do których ma dostęp. W przypadku witryn, do których rozszerzenie nie ma dostępu, Chrome oznacza rozszerzenie, aby pokazać, że prosi ono o dostęp do strony. Użytkownik może następnie przyznać dostęp do rozszerzenia. Jeżeli skrypt treści ma ustawione wstrzyknięcie na poziomie document_idle, skrypt zostanie natychmiast wstrzyknięty. W przeciwnym razie Chrome prosi użytkownika o odświeżenie strony, aby umożliwić rozszerzeniu wstrzykiwanie skryptów podczas wcześniejszego wczytywania strony (w polu document_start lub document_end). Wywołania zwrotne metod tabs.executeScript() i tabs.insertCSS() są wywoływane tylko wtedy, gdy użytkownik przyzna dostęp do witryny.

Pliki cookie i strona w tle (XHR)

Rozszerzenie może nadal odczytywać i modyfikować wszystkie pliki cookie, a także wykonywać żądania XHR z innych domen w przypadku witryn, do których ma dostęp. Nie ma karty powiązanej ze stroną rozszerzenia uzyskującą dostęp do plików cookie innego źródła lub XHRing do innego hosta, dlatego Chrome nie wyświetla plakietki rozszerzenia, aby wskazać użytkownikowi, że żąda ono dostępu do witryny. Próba uzyskania dostępu do pliku cookie z innej witryny lub wykonania XHR z innej domeny zakończy się błędem, tak jakby plik manifestu rozszerzenia nie zawierał uprawnień hosta. W takich przypadkach zalecamy skorzystanie z opcjonalnych uprawnień, które umożliwiają użytkownikowi przyznawanie w środowisku wykonawczym dostępu do różnych witryn.

Przykład poniżej pokazuje, jak to działa w przypadku interfejsu API plików cookie.

Przed:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Po:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Migracja

Jakie są sprawdzone metody, aby uniknąć negatywnych skutków?

Aby postępować zgodnie ze sprawdzonymi metodami, rozszerzenia mogą używać interfejsów API opcjonalnych uprawnień, activeTab i declarativeContent. Opcjonalne uprawnienia są przyznawane w czasie działania i pozwalają rozszerzeniu na żądanie określonego dostępu do witryny. Nie ma to wpływu na uprawnienie activeTab, a korzystające z niego rozszerzenia będą nadal działać normalnie. Interfejs API declarativeContent zastępuje wiele funkcji wstrzykiwanych na każdej stronie.

Co się stanie z ustawieniami bieżących użytkowników?

Ta zmiana nie będzie od razu miała wpływu na żadne bieżące uprawnienia przyznane Twojemu rozszerzeniu. Oznacza to, że będzie ono działać tak jak dotychczas, chyba że użytkownik podejmie działania ograniczające dostęp do stron, do których ma on dostęp. W kolejnych wersjach Chrome będzie udostępniać użytkownikom więcej opcji dostosowywania ustawień.

Jak mogę sprawdzić, czy moje rozszerzenie ma uprawnienia do uruchamiania w witrynie?

Aby sprawdzić, czy rozszerzenie ma dostęp do danego źródła, możesz użyć interfejsu API permissions.contains().