Wycofania i usuwania interfejsów API w Chrome 54

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 54, która od 15 września jest w wersji beta. Ta lista może się w każdej chwili zmienić.

Wyłącz nawigację w module unload

TL;DR: wszelkie nawigację między domenami w modułach obsługi zdarzeń window.onunload będą niedozwolone, aby umożliwić stosowanie Chrome w specyfikacji HTML, a także w Firefoksie i Safari.

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

Poprzednie wersje Chrome umożliwiały przerywanie nawigacji między domenami w window.onunload. ustawiając window.location.href = '#fragment'. Zgodnie ze specyfikacją HTML w modułach unload są dozwolone tylko elementy nawigacyjne na stronie, a w poprzednich wersjach Chrome inne metody nawigacji były zablokowane zgodnie ze specyfikacją. Od Chrome 54 takie elementy nawigacyjne będą niedozwolone, aby zapewnić zgodność ze specyfikacją oraz Firefox i Safari.

Nieużywane HTTP/0.9

TL;DR: protokół HTTP/0.9 został wycofany. Programiści powinni przejść na nowszą wersję, najlepiej HTTP/2.

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

HTTP/0.9 to prefiks HTTP/1.x. Nie ma wielu funkcji niż jego następców. Szczególną obawą we współczesnym internecie jest brak nagłówków odpowiedzi. Bez nich nie można zweryfikować, czy odpowiedź HTTP/0.9 jest w rzeczywistości odpowiedzią HTTP/0.9. Może to spowodować kilka problemów. Oto kilka przykładów:

  • Klienty, które traktują określone odpowiedzi błędów jako prawidłowe odpowiedzi HTTP/0.9.
  • Serwery, które nie zamykają gniazda żądań, przez co klienci traktują odpowiedzi jako oczekujące żądania GET, które pozostają aktywne wiecznie lub do czasu przejścia użytkownika ze strony, która wysłała żądanie.
  • Serwery, które nie są w stanie wskazać przeglądarce, że żądanie nie powiodło się, co może powodować problemy z heurystyczną pamięcią podręczną.

Jedynym niezawodnym sposobem rozwiązania problemów z HTTP/0.9 jest całkowite usunięcie jego obsługi. Dlatego w Chrome 54 przestajemy obsługiwać protokół HTTP/0.9.

Aplikacja initTouchEvent została usunięta

TL;DR: wycofaliśmy wersję initTouchEvent i zastąpiliśmy ją TouchEvent constructor, aby poprawić zgodność ze specyfikacjami. Zostanie ona całkowicie usunięta w Chrome 54.

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

Od dawna deweloperzy mogą tworzyć syntetyczne zdarzenia dotyku w Chrome przy użyciu interfejsu API initTouchEvent. Często służą one do symulowania zdarzeń dotknięcia na potrzeby testowania lub automatyzacji niektórych interfejsów użytkownika w witrynie. Od wersji Chrome 49 ten wycofany interfejs API wyświetla następujące ostrzeżenie .

Ostrzeżenie o zdarzeniu dotknięcia
Interfejs TouchEvent.initTouchEvent został wycofany i zostanie usunięty w wersji M53 około września 2016 r. Użyj konstruktora TouchEvent. Więcej informacji znajdziesz na stronie https://www.chromestatus.com/features/5730982598541312.

Poza tym, że te zdarzenia nie są uwzględnione w specyfikacji zdarzeń kliknięcia, jest wiele powodów, dla których ta zmiana jest dobra. Implementacja przeglądarki initTouchEvent w Chrome w ogóle nie była zgodna z interfejsem API initTouchEvent przeglądarki Safari, różniła się od Firefoksa na Androidzie. Należy też pamiętać, że konstruktor TouchEvent jest znacznie łatwiejszy w użyciu.

Z tego powodu zdecydowaliśmy się postępować zgodnie ze specyfikacją, zamiast utrzymywać interfejs API, który nie jest określony ani zgodny z jedyną inną implementacją. Deweloperzy, którzy potrzebują alternatywy, powinni używać konstruktora TouchEvent.

Ponieważ implementacje interfejsu API initTouchEvent na iOS i Androidzie/Chrome bardzo się różniły, witryny często miałyby kod podobny do (często zapominał o Firefoksie).

    var event = document.createEvent('TouchEvent');
    
    if(ua === 'Android') {
      event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
        300, 300, 200, 200, false, false, false, false);
    } else {
      event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
        200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
    }
    
    document.body.dispatchEvent(touchEvent);

To błąd, bo szukanie ciągu „Android” w parametrze User-Agent i Chrome na Androidzie zostanie dopasowane i wycofane. Nie można jej jednak jeszcze usunąć, ponieważ przez jakiś czas na Androidzie będą pojawiać się inne przeglądarki oparte na WebKit i starszych wersjach Blink, które wymagają obsługi starszego interfejsu API.

Aby prawidłowo obsługiwać dyrektywy TouchEvent w internecie, zmień kod tak, aby obsługiwał Firefox, IE Edge i Chrome. W tym celu sprawdź, czy w obiekcie window istnieje znacznik TouchEvent i czy ma on dodatnią „długość” (wskazuje, że jest to konstruktor, który pobiera argument).

    if('TouchEvent' in window && TouchEvent.length > 0) {
      var touch = new Touch({
        identifier: 42,
        target: document.body,
        clientX: 200,
        clientY: 200,
        screenX: 300,
        screenY: 300,
        pageX: 200,
        pageY: 200,
        radiusX: 5,
        radiusY: 5
      });
    
      event = new TouchEvent("touchstart", {
        cancelable: true,
        bubbles: true,
        touches: [touch],
        targetTouches: [touch],
        changedTouches: [touch]
      });
    }
    else {
      event = document.createEvent('TouchEvent');
    
      if(ua === 'Android') {
        event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
          300, 300, 200, 200, false, false, false, false);
      } else {
        event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
          200, false, false, false, false, touches, targetTouches, 
          changedTouches, 0, 0);
      }
    }
    
    document.body.dispatchEvent(touchEvent);

Usunięto atrybut KlawiaturaEvent.keyIdentifier

TL;DR: mało obsługiwana właściwość keyboardEvent.keyIdentifier zostanie zastąpiona właściwością KeyboardEvent.key opartą na standardach.

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

Atrybut keyboardEvent.keyIdentifier przez krótki czas był częścią specyfikacji W3C w latach 2009 i 2010. Została jednak w ogóle zaimplementowana tylko w WebKit.

Deweloperzy, którzy chcą zastąpić ten atrybut, mogą użyć opartej na standardach właściwości KeyboardEvent.key lub KeyboardEvent.code (jak opisano w artykule opublikowanym zeszłej wiosny). Pierwszy z nich ma najobszerniejszą implementację i jest obsługiwany we wszystkich popularnych przeglądarkach na komputerach oprócz Safari. Ta wersja jest obecnie obsługiwana w przeglądarkach Chrome, Firefox i Opera. Usunięcie tej funkcji ma na celu zwiększenie rozpowszechnienia usługi KeyboardEvent.key. Apple nie wie jeszcze, czy ta funkcja będzie obsługiwana. Wycofane (ale nie zostały jeszcze usunięte z Chrome) właściwości KeyboardEvent.keyCode i KeyboardEvent.charCode są nadal dostępne w Safari.

Usuń zdarzenie oraz atrybut i atrybut zakończony MediaStream

TL;DR: usuniemy zdarzenie i atrybut ended oraz moduł obsługi zdarzeń onended, ponieważ usunęliśmy je ze specyfikacji przechwytywania multimediów i strumieni.

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

Ani zdarzenie ended, ani moduł obsługi zdarzeń onended nie są częścią specyfikacji WebRTC od około 3 lat. Deweloperzy, którzy chcą oglądać wydarzenia, powinni używać parametru MediaStreamTracks zamiast MediaStreams.

Wycofywanie SVGSVGElement.viewPort

Ta implementacja nie działa w Chrome od 2012 roku. Ten atrybut w ogóle nie występuje w innych przeglądarkach i został usunięty ze specyfikacji. Z tych powodów jest ona wycofywana. Usunięcie zostanie przewidziane w Chrome 55.

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

Wycofanie funkcji SVGViewElement.viewTarget

Atrybut SVGViewElement.viewTarget nie jest częścią specyfikacji SVG2.0 i jest używany w niewielkim stopniu lub w ogóle nie istnieje. Ten atrybut został wycofany w Chrome 54. Usunięcie zostanie przewidziane w Chrome 56.

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

Usuń zdarzenie SVGZoomEvent

Element SVGZoomEvent nie jest częścią specyfikacji SVG2.0 i nie działa w Chromium. Pomimo że nadal jest on wykrywalny, co może być mylące dla deweloperów. Zostanie ona usunięta.

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