Podsumowanie
Co się zmienia?
Począwszy od Chrome 70 użytkownicy mogą ograniczać dostęp do hosta rozszerzeń do niestandardowej listy witryn lub skonfigurować rozszerzenia tak, by dostęp do bieżącej strony był możliwy po kliknięciu.
Których interfejsów API dotyczy problem?
Ta zmiana wpływa na wszystkie interfejsy API, na które mają wpływ uprawnienia hosta określone w rozszerzeniu
pliku manifestu i skryptów treści. Interfejsy API, które wymagają uprawnień hosta, to między innymi webRequest,
pliki cookie, tabs.executeScript() i tabs.insertCSS() oraz wykonywanie zadań z innych domen
, np. za pomocą interfejsu API XMLHTTPRequest
lub fetch()
.
Ograniczam dostęp
W jaki sposób użytkownik może ograniczyć dostęp?
Użytkownicy mogą zezwolić na wyświetlanie rozszerzenia po kliknięciu, w określonym zestawie witryn lub we wszystkich witrynach
witryn. Te opcje są widoczne dla użytkowników na stronie chrome://extensions
oraz
w menu kontekstowym rozszerzenia.
Co się stanie, jeśli użytkownik uruchomi rozszerzenie „po kliknięciu”?
Rozszerzenie działa tak, jakby używało uprawnienia activeTab. Rozszerzenie to otrzymał tymczasowy dostęp do dowolnego hosta, na którym użytkownik klika rozszerzenie, jeśli żądanie tego hosta wymaga rozszerzenie (i nie jest to strona z ograniczonym dostępem, np. chrome://settings). Gdy ustawisz uruchamianie po kliknięciu, Chrome oznaczy rozszerzenie kółkiem i oznacz je cieniem (patrz poniżej), aby wskazać, że o dostęp do określonej witryny.
Co się stanie, jeśli użytkownik wyświetli moje rozszerzenie w określonych witrynach?
Rozszerzenie może wyświetlać się automatycznie we wszystkich witrynach wybranych przez użytkownika i ma dostęp do witryny bez żadnych działań ze strony użytkownika. w innych witrynach, o które prosiło rozszerzenie, ale użytkownik tego nie zrobił Przyznaj uprawnienia, działanie rozszerzenia będzie takie samo jak w przypadku kliknięcia przez użytkownika.
Co się stanie, jeśli użytkownik zdecyduje się wyświetlać moje rozszerzenie we wszystkich witrynach?
Rozszerzenie może automatycznie uzyskiwać dostęp do wszystkich witryn wskazanych w pliku manifestu.
Zachowania interfejsu API
Interfejs API żądania internetowego
Rozszerzenie może nadal przechwytywać, modyfikować i blokować wszelkie żądania ze stron, do których ma dostęp. Dla: witryn, do których rozszerzenie nie ma dostępu, Chrome oznaczy rozszerzenie, wskazując, że prosi o dostęp do strony. Użytkownik może następnie przyznać dostęp do rozszerzenia. Następnie Chrome prosi użytkownika o odświeżenie strony, aby umożliwić rozszerzeniu przechwytywanie żądań sieciowych.
Skrypty dotyczące treści, tab.executeScript(), karty.insertCSS()
Rozszerzenie może nadal automatycznie wstrzykiwać skrypty i arkusze stylów ze wszystkich witryn, do których ma dostęp. do. W przypadku witryn, do których rozszerzenie nie ma dostępu, Chrome oznaczy rozszerzenie, wskazując, rozszerzenie prosi o dostęp do strony. Użytkownik może wtedy przyznać dostęp do rozszerzenia. Jeśli skrypt content jest ustawiony na wstrzyknięcie kodu w 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 wcześniej na wczytanie strony (na stronie document_start lub document_end). wywołania zwrotne tabs.executeScript(), Metody 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ć pliki cookie pochodzące z innych domen oraz wykonywać w nich żądania XHR z innych domen. ma dostęp do. Ponieważ ze stroną rozszerzenia uzyskującą dostęp do innego źródła nie jest powiązana z żadną kartą plików cookie lub XHR do innego hosta, Chrome nie oznacza rozszerzenia, aby wskazać użytkownikowi, że które rozszerzenie chce uzyskać dostęp do strony. Próbujesz uzyskać dostęp do pliku cookie innej witryny lub utworzyć XHR z innej domeny wystąpi błąd, tak jakby plik manifestu rozszerzenia nie zawierał hosta uprawnienia. W takich przypadkach zachęcamy do korzystania z opcjonalnych uprawnień, dzięki którym użytkownik w celu przyznania środowiska wykonawczego dostępu do różnych witryn.
Poniższy przykład pokazuje, jak może 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, jak uniknąć negatywnych skutków?
Rozszerzenia mogą korzystać z interfejsów API z opcjonalnymi uprawnieniami, activeTab i declarativeContent , aby postępować zgodnie ze sprawdzonymi metodami. Opcjonalne uprawnienia są przyznawane w trakcie działania i pozwalają rozszerzeniu na dostęp do poprosić o określony dostęp do witryny. Nie ma to wpływu na uprawnienie activeTab, a rozszerzenia będzie działać normalnie. Interfejs declarativeContent API zastępuje wiele rozwiązań wstawianie skryptów na każdej stronie.
Co się stanie z kontami moich obecnych użytkowników ustawieniach?
Ta zmiana nie wpłynie od razu na żadne bieżące uprawnienia przyznane Twojemu rozszerzeniu. To znaczy, będzie działał bez zmian, chyba że użytkownik podejmie działania w celu ograniczenia witryn, mają inne uprawnienia dostępu. W kolejnych wersjach Chrome zapewni użytkownikom więcej ustawień ustawieniach.
Jak sprawdzić, czy rozszerzenie może działać w witrynie?
Aby sprawdzić, czy rozszerzenie zostało usunięte, możesz użyć interfejsu API permissions.contains(). dostęp do danego źródła.