Wycofania i usuwania w Chrome 60

Jan Kowalski
Joe Medley

W niemal każdej wersji Chrome obserwujemy znaczną liczbę aktualizacji i ulepszeń produktu, jego wydajności, a także możliwości platformy internetowej. W tym artykule opisujemy wycofywanie i usuwanie przeglądarki Chrome 60, która od 8 czerwca znajduje się w fazie beta. Ta lista może się w każdej chwili zmienić.

Bezpieczeństwo

crypto.subtle wymaga teraz bezpiecznego źródła

Interfejs Web Crypto API, który jest obsługiwany od wersji Chrome 37, zawsze działał w niezabezpieczonych źródłach. Ze względu na długo obowiązującą w Chrome zasadę wybierania bezpiecznych źródeł na potrzeby zaawansowanych funkcji strona crypto.subtle jest widoczna nie tylko w przypadku bezpiecznych źródeł.

Intencja usunięcia | Błąd Chromium

Usuń inicjowane przez treść nawigowania po górnej ramce prowadzące do adresów URL danych

Ze względu na to, że te przeglądarki są nieznane użytkownikom niewymagającym wiedzy technicznej, coraz częściej obserwujemy, jak schemat data: jest wykorzystywany do podszywania się pod inne osoby i prób wyłudzenia informacji. Aby temu zapobiec, blokujemy wczytywanie adresów URL data: w górnej ramce przez strony internetowe. Dotyczy to tagów <a>, window.open, window.location i podobnych mechanizmów. Schemat data: będzie nadal działać w przypadku zasobów wczytywanych przez stronę.

Ta funkcja została wycofana w Chrome 58 i jest teraz usunięta.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Tymczasowo wyłącz funkcję navigator.sendBeacon() dla niektórych obiektów blob

Funkcja navigator.sendBeacon() jest dostępna od Chrome 39. Zgodnie z pierwotną implementacją argument data funkcji może zawierać dowolny dowolny obiekt blob, którego typ nie jest na liście bezpiecznych adresów CORS. Uważamy, że jest to potencjalne zagrożenie, choć jeszcze nikt nie próbował go wykorzystać. Nie możemy natychmiastowo rozwiązać tego problemu, dlatego tymczasowo nie można wywołać funkcji sendBeacon() w przypadku obiektów blob, których typ NIE jest na liście bezpiecznych CORS.

Ta zmiana została wdrożona w Chrome 60, ale została już scalona z Chrome 59.

Błąd Chromium

CSS

Przekształcaj podrzędny kombinator cienia na taki, który zachowywa się jak kombinator podrzędny

Kombinator potomny przechwytującego cień (>>>), który wchodzi w skład modułu Scoping Module Level 1, miał dopasować elementy podrzędne określonego elementu nadrzędnego, nawet jeśli pojawiły się wewnątrz drzewa cienia. Wiązało się to z pewnymi ograniczeniami. Po pierwsze, zgodnie ze specyfikacją może być używany tylko w wywołaniach JavaScript, takich jak querySelector(), i nie działa w arkuszach stylów. Co ważniejsze, dostawcy przeglądarek nie byli w stanie wydobyć ich z platformy Shadow DOM powyżej jednego poziomu.

W związku z tym kombinator potomny został usunięty z odpowiednich specyfikacji, w tym z modelu Shadow DOM v1. Zamiast usuwać selektor z Chromium, zamiast uszkodzić strony internetowe, zdecydowaliśmy, że kombinator podrzędny przechwytujący cień zostanie przypisany do kombinatora podrzędnego. Pierwotne działanie zostało wycofane w Chrome 45. Nowy sposób działania został wdrożony w Chrome 61.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

JavaScript

Wycofaj i usuń RTCPeerConnection.getStreamById()

Prawie 2 lata temu getStreamById()został usunięty ze specyfikacji WebRTC. W większości innych przeglądarek ten tag został już usunięty ze swoich implementacji. Chociaż uważa się, że ta funkcja jest rzadko używana, istnieje też niewielkie ryzyko interoperacyjności z przeglądarkami opartymi na Edge i WebKit innych niż Safari, gdzie getStreamById() nadal jest obsługiwana. Deweloperzy, którzy potrzebują innej implementacji, mogą znaleźć przykładowy kod w intencji do usunięcia poniżej.

Funkcja usuwania jest dostępna w Chrome 62.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Wycofanie funkcji SVGPathElement.getPathSegAtLength

Ponad 2 lata temu getPathSegAtLength()zostało usunięte ze specyfikacji SVG. W przypadku tej metody istnieje tylko kilka trafień w archiwum httparchive, dlatego jest ona wycofywana w Chrome 60. Aktualizacja powinna nastąpić w Chrome 62, która zostanie udostępniona na początku lub w połowie października.

Intencje do wycofania | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Przeniesienie atrybutu getContextAttributes() za flagą

Funkcja getContextAttributes() jest obsługiwana w CanvasRenderingContext2D od 2013 roku. Ta funkcja nie była jednak objęta żadnymi standardami i od tego czasu nie należy do nich również. Powinna być zaimplementowana za flagą wiersza poleceń --enable-experimental-canvas-features, ale przez pomyłkę nie. W Chrome 60 tego przeoczenia zostały poprawione. Uważa się, że ta zmiana jest bezpieczna, ponieważ nie ma danych wskazujących na to, że ktoś jej używa.

Błąd Chromium

Usuń nagłówek Headers.prototype.getAll()

Usuwamy funkcję Headers.prototype.getAll() zgodnie z najnowszą wersją specyfikacji pobierania.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usuwanie interfejsu CrawlDB.webkitGetDatabaseNames()

Dodaliśmy tę funkcję, gdy indeksowana baza danych była stosunkowo nowa w Chrome, a wprowadzanie prefiksów było bardzo popularne. Asynchronicznie zwraca listę nazw istniejących baz danych w źródle, co wydawało się wystarczająco rozsądne.

Niestety ten projekt jest uszkodzony, ponieważ wyniki po zwróceniu mogą być nieaktualne, więc tak naprawdę można ich używać tylko do logowania, a nie do poważnych aplikacji. Problem z githubem śledzi lub linki do wcześniejszych dyskusji na temat alternatywnych rozwiązań, które wymagają innego podejścia. Deweloperzy nieprzerwanie interesowali się programami, ale ze względu na brak postępów w różnych przeglądarkach ten problem został już rozwiązany przez autorów bibliotek.

Deweloperzy, którzy potrzebują tej funkcji, muszą opracować własne rozwiązanie. Na przykład biblioteki takie jak Dexie.js używają tabeli globalnej, która jest kolejną bazą danych do śledzenia nazw baz danych.

Ta funkcja została wycofana w Chrome 58 i jest teraz usunięta.

Intencja do usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usuń WEBKIT_KEYFRAMES_RULE i WEBKIT_KEYFRAME_RULE

Niestandardowe stałe WEBKIT_KEYFRAMES_RULE i WEBKIT_KEYFRAME_RULE zostaną usunięte z reguły CSS. Zamiast niego deweloperzy powinni używać właściwości KEYFRAMES_RULE i KEYFRAME_RULE.

Intencja do usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Interfejs

Wymagaj gestu użytkownika w oknach przedwładowaniem

Od Chrome w wersji 60 okno beforeunload będzie się pojawiać tylko wtedy, gdy ramka, która próbuje ją wyświetlić, wywołała gest lub interakcję użytkownika (albo jeśli jakakolwiek umieszczona ramka otrzymała taki gest). Dla jasności – nie jest to zmiana sposobu wysyłania zdarzenia beforeunload. Zmiana dotyczy tylko wyświetlania okna dialogowego.

Okno beforeunload jest oknem modalnym typu app-modal. W związku z tym jest z natury przyjazna dla użytkownika, co oznacza, że reaguje na nawigację, kwestionując jego decyzję. Ta funkcja ma pozytywne zastosowania. Często używa się go np. do ostrzegania użytkowników, gdy utracą dane podczas korzystania z nawigacji.

Już jakiś czas temu wycofaliśmy możliwość wysyłania przez stronę tekstu do okna beforeunload, ale w przypadku okien beforeunload nadal są one wektorem nadużycia. Okna w witrynie beforeunload są jednym z elementów fałszywych stron internetowych, w których automatycznie odtwarzany dźwięk i tekst zawierający groźby stanowią kontekst, w którym komunikat „Czy na pewno chcesz opuścić tę stronę” staje się niepokojący.

Chcemy nawlekać igłę i zezwolić na tylko prawidłowe korzystanie z okna beforeunload. Dobre wykorzystanie okna dialogowego dotyczy sytuacji, w której użytkownik może utracić dostęp do stanu. Jeśli użytkownik nigdy nie wszedł w interakcję ze stroną, nie może on mieć informacji o stanie, który mógłby zostać utracony. W takim przypadku pomiń okno, aby nie narażać użytkownika na utratę danych.