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