W niemal każdej wersji Chrome obserwujemy znaczną liczbę aktualizacji i ulepszeń produktu, a także jego wydajności, a także możliwości platformy internetowej.
W Chrome od wersji 50 (szacowana data uruchomienia wersji beta: 10–17 marca) wprowadziliśmy w Chrome kilka zmian. Ta lista może się w każdej chwili zmienić.
Pamięć podręczna aplikacji została wycofana w niezabezpieczonych kontekstach
TL;DR: aby uprościć obsługę skryptów w różnych witrynach, wycofujemy AppCache w niezabezpieczonych źródłach. Spodziewamy się, że w Chrome 52 będzie ona działać tylko w źródłach obsługujących treści przez HTTPS.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
AppCache to funkcja, która umożliwia stały i offline dostęp do źródła, co jest bardzo przydatne w przypadku eskalacji uprawnień w przypadku ataku typu cross-site scripting. W ramach szeroko zakrojonych działań na rzecz usuwania zaawansowanych funkcji w niezabezpieczonych źródłach.
Chrome usuwa ten wektor ataku, zezwalając na niego tylko przez HTTPS. Wycofujemy obsługę protokołu HTTP w Chrome 50 i spodziewamy się, że zostanie ona całkowicie usunięta w Chrome 52.
Usunięto Document.defaultCharset
TL;DR: usunięto nazwę document.defaultCharset
, aby poprawić zgodność ze specyfikacjami.
Intencja do usunięcia | Narzędzie do śledzenia stanu Chrome | Problem z błędem CRB
Właściwość document.defaultCharset
, wycofana w Chrome 49, to właściwość tylko do odczytu, która zwraca domyślne kodowanie znaków systemu użytkownika na podstawie jego ustawień regionalnych. Utrzymywanie tej wartości nie jest przydatne ze względu na to, jak przeglądarki używają informacji o kodowaniu znaków w odpowiedzi HTTP lub w metatagu umieszczonym na stronie.
Zamiast tego użyj funkcji document.characterSet
, aby pobrać pierwszą wartość podaną w nagłówku HTTP. Jeśli go nie ma, otrzymasz wartość podaną w atrybucie charset
elementu <meta>
(np. <meta
charset="utf-8">
). Jeśli żadna z tych wartości nie będzie dostępna, wartość document.characterSet
będzie ustawieniem systemowym użytkownika.
Więcej na ten temat możesz przeczytać w tym problemie z githubem.
Z elementu link usunięto atrybut zasobu podrzędnego
TL;DR: usunięto obsługę wartości subresource
w atrybucie rel
atrybutu HTMLLinkElement
.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
Intencją atrybutu subresource
w elemencie <link> było wstępne pobieranie zasobu w czasie bezczynności przeglądarki. Po pobraniu strony przeglądarka może wstępnie pobrać zasoby takie jak inne strony, aby na żądanie użytkowników móc je po prostu pobrać z pamięci podręcznej przeglądarki.
W atrybucie subresource
wystąpiło kilka problemów. Po pierwsze, nigdy nie działało zgodnie z oczekiwaniami. Przywołane zasoby zostały pobrane z niskim priorytetem. Nigdy nie był on zaimplementowany w żadnej przeglądarce innej niż Chrome. W implementacji Chrome wystąpił błąd, który powodował, że zasoby były pobierane dwukrotnie.
Programiści, którzy chcą zwiększyć wygodę użytkowników przez wstępne wczytywanie treści, mają do dyspozycji wiele opcji. Największą z nich można dostosować, tworząc skrypt service worker, który wykorzystuje precaching i interfejs Caches API. Dodatkowe rozwiązania obejmują inne wartości atrybutu rel
, w tym preconnect
, prefetch
, preload
i prerender
. Niektóre z nich są eksperymentalne i mogą nie być powszechnie obsługiwane.
Usuń zastępczą wersję niezabezpieczonej wersji TLS
TL;DR: usuń mechanizm wymuszania na serwerach zwracania danych przy użyciu mniej lub mniej bezpiecznych wersji protokołu TLS.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
Protokół TLS (Transport Layer Security) obsługuje mechanizm negocjowania wersji, co umożliwia wprowadzanie nowych wersji protokołu TLS bez naruszania zgodności. Niektóre serwery wdrożyły to rozwiązanie w taki sposób, że przeglądarki musiały używać w zastępstwie niezabezpieczonych punktów końcowych. Dlatego osoby przeprowadzające ataki mogą wymusić negocjowanie słabszych wersji protokołu TLS na dowolnej witrynie – nie tylko w nieprawidłowo skonfigurowanej.
Strony, których dotyczy problem, nie będą mogły połączyć się z ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
. Administratorzy
powinni upewnić się, że oprogramowanie serwera jest aktualne. Jeśli problem nadal występuje, skontaktuj się z dostawcą oprogramowania serwerowego, by sprawdzić, czy jest możliwe rozwiązanie.
Usuń KlawiaturaEvent.prototype.keyLocation
TL;DR: usuń niepotrzebny alias atrybutu Keyboard.prototype.location
.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
Ten atrybut jest po prostu aliasem atrybutu Keyboard.prototype.location
, który umożliwia rozróżnianie między klawiszami znajdującymi się w wielu miejscach na klawiaturze. Na przykład oba atrybuty pozwalają programistom rozróżnić klawisze Enter
na klawiaturze rozszerzonej.
W metodach RTCPeerConnection wymagane są moduły obsługi błędów i sukcesów
TL;DR: metody RTCPeerConnection createOffer()
i createAnswer()
w WebRTC obecnie wymagają modułu obsługi błędów oraz modułu obsługi powodzenia. Wcześniej można było wywoływać te metody tylko z użyciem modułu obsługi sukcesu. To wykorzystanie jest przestarzałe.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
W Chrome 49 dodaliśmy ostrzeżenie, jeśli wywołujesz setLocalDescription()
lub setRemoteDescription()
bez podawania modułu obsługi błędów. Od wersji Chrome 50 argument modułu obsługi błędów jest wymagany.
Jest to jeden z elementów ułatwiających wprowadzanie obietnic dotyczących tych metod, zgodnie ze specyfikacją WebRTC.
Oto przykład z prezentacji RTCPeerConnection w WebRTC (main.js, wiersz 126):
function onCreateOfferSuccess(desc) {
pc1.setLocalDescription(desc, function() {
onSetLocalSuccess(pc1);
}, onSetSessionDescriptionError);
pc2.setRemoteDescription(desc, function() {
onSetRemoteSuccess(pc2);
}, onSetSessionDescriptionError);
pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
}
Zarówno setLocalDescription()
, jak i setRemoteDescription()
zawierają moduł obsługi błędów. Starsze przeglądarki, które oczekują wyłącznie modułu obsługi powodzenia, będą ignorować argument modułu obsługi błędu, jeśli ten argument jest obecny. Wywołanie tego kodu w starszej przeglądarce nie spowoduje wyjątku.
Ogólnie w przypadku produkcyjnych aplikacji WebRTC zalecamy korzystanie z adapter.js
– podkładki zarządzanej przez projekt WebRTC – do odizolowania aplikacji przed zmianami specyfikacji i różnicami prefiksów.
Zdarzenie XMLHttpRequestPostępEvent nie jest już obsługiwane
TL;DR: usuniemy interfejs XMLHttpRequestProgressEvent
wraz z atrybutami position
i totalSize
.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
To zdarzenie służyło do obsługi właściwości zgodności z gekonem position
i totalSize
. W Mozilli 22 wycofaliśmy obsługę tych 3 rozwiązań, a funkcje te od dawna zostały zastąpione przez ProgressEvent
.
var progressBar = document.getElementById("p"),
client = new XMLHttpRequest()
client.open("GET", "magical-unicorns")
client.onprogress = function(pe) {
if(pe.lengthComputable) {
progressBar.max = pe.total
progressBar.value = pe.loaded
}
}
Usuń rozszerzenia zaszyfrowanych multimediów z przedrostkiem
TL;DR: wycofaliśmy zaszyfrowane rozszerzenia multimediów z prefiksami i zastąpiliśmy je bez prefiksu specyfikacji.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
W Chrome 42 udostępniliśmy opartą na specyfikacjach wersję zaszyfrowanych rozszerzeń multimediów bez prefiksu. Ten interfejs API służy do wykrywania i wybierania systemów zarządzania prawami cyfrowymi oraz do interakcji z nimi na potrzeby HTMLMediaElement
.
To było prawie rok temu. Ponieważ wersja bez prefiksu ma więcej możliwości niż wersja z prefiksem, pora usunąć wersję API z prefiksem.
Usunięcie obsługi właściwości SVGElement.offset
TL;DR: właściwości przesunięcia w przypadku SVGElement zostały zastąpione bardziej ogólnie obsługiwanymi właściwościami HTMLElement
.
Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium
Właściwości przesunięcia od dawna są obsługiwane przez HTMLElement
i SVGElement
, ale Gecko i Edge obsługują je tylko w HTMLElement
. Aby poprawić spójność między przeglądarkami, właściwości te zostały wycofane w Chrome 48 i teraz są usuwane.
Mimo że odpowiadające im właściwości wchodzą w skład HTMLElement
, deweloperzy szukający alternatywy mogą także użyć właściwości getBoundingClientRect()
.