Практически в каждой версии Chrome мы видим значительное количество обновлений и улучшений продукта, его производительности и возможностей веб-платформы. В этой статье описываются устаревшие и удалённые функции в Chrome 54, который находится в стадии бета-тестирования с 15 сентября. Этот список может быть изменён в любое время.
Отключить навигацию в обработчике выгрузки
TL;DR: Все кросс-доменные навигации будут запрещены в обработчиках событий window.onunload , чтобы привести Chrome в соответствие со спецификацией HTML, а также Firefox и Safari.
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
В предыдущих версиях Chrome разрешалось прерывать навигацию между источниками внутри window.onunload , устанавливая window.location.href = '#fragment' . Согласно спецификации HTML , в обработчиках unload разрешены только внутристраничные навигации, а в предыдущих версиях Chrome другие методы навигации были заблокированы в соответствии с требованиями спецификации. Начиная с Chrome 54, такие навигации будут запрещены для соответствия требованиям спецификации, а также Firefox и Safari.
HTTP/0.9 устарел
TL;DR: HTTP/0.9 устарел. Разработчикам следует перейти на более позднюю версию, предпочтительно HTTP/2.
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
HTTP/0.9 — предшественник HTTP/1.x . В нём отсутствуют многие функции его последователей. Особую проблему для современного веба представляет отсутствие заголовков ответа. Без них невозможно проверить, что ответ HTTP/0.9 действительно является ответом HTTP/0.9. Это может привести к ряду проблем. Вот некоторые из них:
- Клиенты, которые обрабатывают определенные ответы об ошибках как допустимые ответы HTTP/0.9.
- Серверы, которым не удается закрыть сокет запроса, заставляют клиентов обрабатывать ответы как зависший GET-запрос, который либо остается активным вечно, либо пока пользователь не уйдет со страницы, с которой был сделан запрос.
- Серверы, которые не могут сообщить браузеру о сбое запроса, могут вызвать проблемы с эвристикой кэширования.
Единственный надёжный способ решения проблем с HTTP/0.9 — полное прекращение его поддержки. Именно поэтому поддержка HTTP/0.9 прекращена в Chrome 54.
Использование initTouchEvent удалено.
TL;DR : initTouchEvent устарел в пользу constructor TouchEvent для улучшения соответствия спецификации и будет полностью удален в Chrome 54.
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
Разработчики уже давно могут создавать синтетические сенсорные события в Chrome с помощью API initTouchEvent . Они часто используются для имитации сенсорных событий, например, для тестирования или автоматизации некоторых пользовательских интерфейсов на сайте. Начиная с Chrome 49, этот устаревший API выводит следующее предупреждение.

TouchEvent.initTouchEvent устарел и будет удалён в версии M53 примерно в сентябре 2016 года. Вместо него используйте конструктор TouchEvent . Подробнее см. https://www.chromestatus.com/features/5730982598541312 . Помимо того, что это изменение не входит в спецификацию Touch Events, есть ряд причин, почему оно полезно . Реализация initTouchEvent в Chrome была совершенно несовместима с API initTouchEvent в Safari и отличалась от реализации в Firefox на Android. И наконец, конструктор TouchEvent стал гораздо проще в использовании.
По этим причинам мы решили следовать спецификации, а не поддерживать API, который не указан в спецификации и не совместим с единственной другой реализацией. Разработчикам, которым нужна альтернатива, следует использовать конструктор TouchEvent .
Поскольку реализации API initTouchEvent для iOS и Android/Chrome сильно различались, на сайтах часто встречался код примерно такого содержания (часто забывая о Firefox):
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);
Это плохо, потому что он ищет «Android» в User-Agent, и Chrome на Android будет соответствовать этому требованию и укажет на это устаревание. Однако пока это невозможно удалить, поскольку на Android ещё какое-то время будут существовать другие браузеры на базе WebKit и Blink, которым всё равно потребуется поддержка старого API.
Для правильной обработки TouchEvent в Интернете вам следует изменить код для поддержки Firefox, IE Edge и Chrome, проверив наличие TouchEvent в объекте window , и если он имеет положительную «длину» (указывающую на то, что это конструктор, принимающий аргумент), вы должны использовать ее.
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);
Атрибут KeyboardEvent.keyIdentifier удален
TL;DR: Малоподдерживаемое свойство keyboardEvent.keyIdentifier удаляется в пользу стандартного свойства KeyboardEvent.key .
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
Атрибут keyboardEvent.keyIdentifier некоторое время был частью спецификации W3C в 2009 и 2010 годах. Однако он был реализован только в WebKit.
Разработчики, которым необходимо заменить этот атрибут, могут использовать либо стандартное свойство KeyboardEvent.key , либо свойство KeyboardEvent.code (как описано в нашей статье прошлой весной ). Первое свойство имеет самую широкую базу реализаций и поддерживается всеми основными десктопными браузерами, кроме Safari. Второе в настоящее время поддерживается в Chrome, Firefox и Opera. Удаление этой функции призвано стимулировать внедрение свойства KeyboardEvent.key . Apple пока не сообщает, будет ли оно поддерживать эту функцию; однако также устаревшие (но пока не удалённые из Chrome) свойства KeyboardEvent.keyCode и KeyboardEvent.charCode по-прежнему доступны в Safari.
Удалить событие и атрибут завершения MediaStream, а также атрибут onended
TL;DR: Событие и атрибут ended , а также обработчик событий onended удаляются, поскольку они были удалены из спецификации Media Capture and Streams .
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
Ни событие ended , ни обработчик событий onended не входят в спецификацию WebRTC уже около трёх лет. Разработчикам, желающим отслеживать события, следует использовать MediaStreamTracks вместо MediaStreams .
Отменить поддержку SVGSVGElement.viewPort
Реализация не работала в Chrome с 2012 года. Атрибут полностью отсутствует в других браузерах и был удалён из спецификации. По этим причинам свойство считается устаревшим. Ожидается его удаление в Chrome 55.
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
Отменить поддержку SVGViewElement.viewTarget
Атрибут SVGViewElement.viewTarget не входит в спецификацию SVG2.0 и используется редко или вообще не используется. Этот атрибут устарел в Chrome 54. Ожидается его удаление в Chrome 56.
Намерение удалить | Chromestatus Tracker | Ошибка Chromium
Удалить SVGZoomEvent
Событие SVGZoomEvent не входит в спецификацию SVG2.0 и не работает в Chromium. Несмотря на это, оно всё ещё распознаётся, что может вызывать путаницу у разработчиков. Оно будет удалено.