Wycofania i usuwania interfejsów API w Chrome 54

W niemal każdej wersji Chrome wprowadzamy wiele aktualizacji i ulepszeń produktu, jego wydajności oraz możliwości platformy internetowej. W tym artykule opisujemy wycofane i usunięte funkcje w Chrome 54, która od 15 września jest dostępna w wersji beta. Ta lista może w każdej chwili ulec zmianie.

Wyłączanie nawigacji w module obsługi wyładowywania

TL;DR: wszystkie nawigacje między domenami zostaną zablokowane w procedurach obsługi zdarzeń window.onunload, aby dostosować Chrome do specyfikacji HTML, a także do przeglądarek Firefox i Safari.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

W poprzednich wersjach Chrome można było przerywać nawigację między domenami w elemencie window.onunload. ustawiając window.location.href = '#fragment'. Zgodnie ze specyfikacją HTML w procedurach obsługi wyładowania dozwolone są tylko nawigacje na stronie, a w poprzednich wersjach Chrome inne metody nawigacji były blokowane zgodnie ze specyfikacją. Od Chrome 54 takie nawigacje będą niedozwolone, aby dostosować przeglądarkę do specyfikacji, a także do przeglądarek Firefox i Safari.

HTTP/0.9 nieaktualny

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

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

HTTP/0.9 to poprzednik HTTP/1.x. Brakuje w nim wielu funkcji, które mają jego następcy. Szczególnym problemem współczesnego internetu jest brak nagłówków odpowiedzi. Bez nich nie można sprawdzić, czy odpowiedź HTTP/0.9 jest rzeczywiście odpowiedzią HTTP/0.9. Może to powodować kilka problemów. Przykłady problemów:

  • Klienci, którzy traktują niektóre odpowiedzi z błędami jako prawidłowe odpowiedzi HTTP/0.9.
  • Serwery, które nie zamykają gniazda żądania, co powoduje, że klienci traktują odpowiedzi jako zawieszone żądanie GET, które pozostaje aktywne bezterminowo lub do momentu, gdy użytkownik opuści stronę, która wysłała żądanie.
  • Serwery, które nie mogą poinformować przeglądarki, że żądanie nie zostało zrealizowane, co może powodować problemy z heurystyką buforowania.

Jedynym niezawodnym sposobem na rozwiązanie problemów z protokołem HTTP/0.9 jest całkowite wyłączenie jego obsługi. Dlatego w Chrome 54 usunęliśmy obsługę HTTP/0.9.

Usunięcie użycia initTouchEvent

W skrócie: initTouchEvent został wycofany na rzecz TouchEvent constructor, aby zwiększyć zgodność ze specyfikacją. Zostanie całkowicie usunięty w Chrome 54.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

Od dłuższego czasu deweloperzy mogą tworzyć w Chrome syntetyczne zdarzenia dotykowe za pomocą interfejsu initTouchEvent API. Są one często używane do symulowania zdarzeń dotykowych na potrzeby testowania lub automatyzowania niektórych interfejsów w witrynie. Od wersji Chrome 49 ten wycofany interfejs API wyświetla to ostrzeżenie .

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

Oprócz tego, że nie jest to zgodne ze specyfikacją zdarzeń dotykowych, istnieje kilka powodów, dla których ta zmiana jest korzystna. Implementacja initTouchEvent w Chrome nie była w ogóle zgodna z interfejsem initTouchEvent w Safari i różniła się od implementacji w Firefoksie na Androida. I wreszcie konstruktor TouchEvent jest znacznie łatwiejszy w użyciu.

Z tych powodów zdecydowaliśmy się postępować zgodnie ze specyfikacją, zamiast utrzymywać interfejs API, który nie jest zgodny ze specyfikacją ani z jedynym innym wdrożeniem. Deweloperzy, którzy potrzebują alternatywnego rozwiązania, powinni użyć konstruktora TouchEvent.

Implementacje interfejsu initTouchEvent API w systemach iOS i Android/Chrome tak bardzo się od siebie różniły, że strony często zawierały kod podobny do tego (często zapominając o Firefoxie):

    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 źle, ponieważ wyszukuje „Androida” w kliencie użytkownika, a Chrome na Androidzie będzie pasować do tego wzorca i zostanie wycofany. Nie można go jeszcze usunąć, ponieważ przez jakiś czas na Androidzie będą działać inne przeglądarki oparte na WebKit i starszych wersjach Blink, które nadal będą wymagać obsługi starszego interfejsu API.

Aby prawidłowo obsługiwać TouchEvent w internecie, zmień kod, aby obsługiwał przeglądarki Firefox, IE Edge i Chrome. W tym celu sprawdź, czy w obiekcie window istnieje TouchEvent, a jeśli ma on dodatnią „długość” (co oznacza, że jest konstruktorem, który przyjmuje argument), użyj go.

    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ęcie atrybutu KeyboardEvent.keyIdentifier

TL;DR: mało obsługiwana właściwość keyboardEvent.keyIdentifier zostanie usunięta na rzecz opartej na standardach właściwości KeyboardEvent.key.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

Atrybut keyboardEvent.keyIdentifier był przez krótki czas częścią specyfikacji W3C w latach 2009–2010. Został on jednak zaimplementowany tylko w WebKit.

Deweloperzy, którzy chcą zastąpić ten atrybut, mogą użyć właściwości KeyboardEvent.key lub KeyboardEvent.code (zgodnie z opisem w artykule z zeszłej wiosny). Pierwszy z nich ma najszerszą bazę wdrożeń, ponieważ jest obsługiwany we wszystkich najważniejszych przeglądarkach na komputery z wyjątkiem Safari. Ta druga jest obecnie obsługiwana w przeglądarkach Chrome, Firefox i Opera. Usunięcie tej funkcji ma na celu zwiększenie popularności usługi KeyboardEvent.key. Apple nie poinformowało, czy będzie obsługiwać tę funkcję. Wycofane (ale jeszcze nie usunięte z Chrome) właściwości KeyboardEvent.keyCodeKeyboardEvent.charCode są nadal dostępne w Safari.

Usuwanie zdarzenia MediaStream ended, atrybutu i atrybutu onended

TL;DR: zdarzenie i atrybut ended oraz moduł obsługi zdarzeń onended zostaną usunięte, ponieważ zostały usunięte ze specyfikacji Media Capture and Streams.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

Ani zdarzenie ended, ani jego obsługa nie są częścią specyfikacji WebRTC od około 3 lat.onended Deweloperzy, którzy chcą obserwować zdarzenia, powinni używać MediaStreamTracks zamiast MediaStreams.

Wycofanie SVGSVGElement.viewPort

Implementacja nie działa w Chrome od 2012 roku. W innych przeglądarkach ten atrybut w ogóle nie występuje i został usunięty ze specyfikacji. Z tego powodu ta właściwość jest wycofywana. Usunięcie jest planowane w Chrome 55.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

Wycofanie SVGViewElement.viewTarget

Atrybut SVGViewElement.viewTarget nie jest częścią specyfikacji SVG2.0, a jego użycie jest niewielkie lub nie występuje. Ten atrybut został wycofany w Chrome 54. Usunięcie jest planowane w Chrome 56.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium

Usuń SVGZoomEvent

Element SVGZoomEvent nie jest częścią specyfikacji SVG2.0 i nie działa w Chromium. Mimo to funkcja jest nadal wykrywalna, co może wprowadzać programistów w błąd. Zostanie on usunięty.

Zamiar usunięcia | Śledzenie stanu Chrome | Błąd w Chromium