Wycofania i usuwania interfejsów API w Chrome 50

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.

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().