Устаревшие и удаленные версии Chrome 60

Джо Медли
Joe Medley

Почти в каждой версии Chrome мы видим значительное количество обновлений и улучшений продукта, его производительности, а также возможностей веб-платформы. В этой статье описаны устаревания и удаления в Chrome 60, бета-версия которого доступна с 8 июня. Этот список может быть изменен в любое время.

Безопасность

crypto.subtle теперь требует безопасного происхождения

API Web Crypto , который поддерживается начиная с Chrome 37, всегда работал с незащищенными источниками. Из-за давней политики Chrome, отдающей предпочтение безопасному источнику мощным функциям , crypto.subtle виден не только в безопасном источнике.

Намерение удалить | Ошибка хрома

Удалить переходы в верхнем фрейме, инициированные контентом, к URL-адресам данных.

Из-за того, что они незнакомы нетехническим пользователям браузеров, мы все чаще видим, что схема data: используется в спуфинговых и фишинговых атаках. Чтобы предотвратить это, мы блокируем загрузку data: URL-адреса в верхнем фрейме. Это относится к тегам <a> , window.open , window.location и подобным механизмам. Схема data: по-прежнему будет работать для ресурсов, загружаемых страницей.

Эта функция устарела в Chrome 58 и теперь удалена.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Временно отключите navigator.sendBeacon() для некоторых больших двоичных объектов.

Функция navigator.sendBeacon() доступна начиная с Chrome 39 . В первоначальной реализации аргумент data функции мог содержать любой произвольный объект, тип которого не внесен в безопасный список CORS. Мы считаем, что это потенциальная угроза безопасности, хотя никто еще не пытался ею воспользоваться. Поскольку у нас НЕТ разумного немедленного решения этой проблемы, временно sendBeacon() больше нельзя вызывать для больших двоичных объектов, тип которых НЕ включен в безопасный список CORS.

Хотя это изменение было реализовано в Chrome 60, с тех пор оно было снова включено в Chrome 59.

Ошибка хрома

CSS

Заставить пронизывающий тень комбинатор-потомок вести себя как комбинатор-потомок

Комбинатор потомков с пробивкой теней ( >>> ), часть модуля области видимости CSS уровня 1 , был предназначен для сопоставления дочерних элементов определенного элемента-предка, даже когда они появлялись внутри теневого дерева. Это имело некоторые ограничения. Во-первых, согласно спецификации , его можно было использовать только в вызовах JavaScript, таких как querySelector() , и он не работал в таблицах стилей. Что еще более важно, производители браузеров не смогли заставить его работать за пределами одного уровня Shadow DOM.

Следовательно, комбинатор-потомок был удален из соответствующих спецификаций, включая Shadow DOM v1. Вместо того, чтобы разрушать веб-страницы, удаляя этот селектор из Chromium, мы решили присвоить псевдоним пронизывающему тени комбинатору-потомку комбинатору-потомку. Исходное поведение устарело в Chrome 45 . Новое поведение реализовано в Chrome 61.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

JavaScript

Устареть и удалить RTCPeerConnection.getStreamById()

Почти два года назад getStreamById() был удален из спецификации WebRTC . Большинство других браузеров уже удалили это из своих реализаций. Хотя эта функция считается малоиспользуемой, также считается, что существует некоторый незначительный риск взаимодействия с браузерами Edge и WebKit , кроме Safari, где getStreamById() все еще поддерживается. Разработчики, которым нужна альтернативная реализация, могут найти пример кода в разделе «Намерение удалить» ниже.

Удаление происходит в Chrome 62.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Устаревший SVGPathElement.getPathSegAtLength

Более двух лет назад getPathSegAtLength() был удален из спецификации SVG . Поскольку в httparchive имеется лишь несколько обращений к этому методу, в Chrome 60 он устарел. Ожидается, что удаление произойдет в Chrome 62, который выйдет где-то в начале или середине октября.

Намерение прекратить поддержку | Трекер Chromestatus | Ошибка хрома

Переместите getContextAttributes() за флагом

Функция getContextAttributes() поддерживается в CanvasRenderingContext2D с 2013 года. Однако эта функция не была частью какого-либо стандарта и с тех пор не стала его частью. Его следовало реализовать с помощью флага командной строки --enable-experimental-canvas-features , но по ошибке этого не произошло. В Chrome 60 эта оплошность исправлена. Считается, что это изменение безопасно, поскольку нет данных о том, что кто-то использует этот метод.

Ошибка хрома

Удалить Headers.prototype.getAll()

Функция Headers.prototype.getAll() удаляется в соответствии с последней версией спецификации Fetch .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить indexedDB.webkitGetDatabaseNames()

Мы добавили эту функцию, когда индексированная база данных была относительно новой в Chrome и использование префиксов было в моде. API асинхронно возвращает список существующих имен баз данных в источнике, что казалось достаточно разумным.

К сожалению, конструкция имеет недостатки: результаты могут устареть сразу после их возврата, поэтому на самом деле ее можно использовать только для журналирования, а не для серьезной логики приложения. Проблема с github отслеживает/ссылается на предыдущее обсуждение альтернатив, которые потребуют другого подхода. Несмотря на то, что разработчики время от времени проявляли интерес, учитывая отсутствие межбраузерного прогресса, авторы библиотек решили проблему.

Разработчикам, которым нужна эта функциональность, необходимо разработать собственное решение. Например, такие библиотеки, как Dexie.js, используют глобальную таблицу, которая сама по себе является еще одной базой данных для отслеживания имен баз данных.

Эта функция устарела в Chrome 58 и теперь удалена.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалите WEBKIT_KEYFRAMES_RULE и WEBKIT_KEYFRAME_RULE.

Нестандартные константы WEBKIT_KEYFRAMES_RULE и WEBKIT_KEYFRAME_RULE удалены из CSS Rule . Вместо этого разработчикам следует использовать KEYFRAMES_RULE и KEYFRAME_RULE .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Пользовательский интерфейс

Требовать жест пользователя для диалоговых окон перед выгрузкой

Начиная с Chrome 60, диалоговое окно beforeunload будет появляться только в том случае, если фрейм, пытающийся его отобразить, получил пользовательский жест или взаимодействие с пользователем (или если какой-либо встроенный фрейм получил такой жест). Чтобы внести ясность: это не изменение отправки события beforeunload . Это просто изменение того, отображается ли диалоговое окно.

Диалоговое окно beforeunload представляет собой модальное диалоговое окно приложения. Таким образом, он по своей сути враждебен пользователю, то есть реагирует на навигацию пользователя, ставя под сомнение его решение. У этой функции есть положительные применения. Например, его часто используют для предупреждения пользователей, когда они потеряют данные при навигации.

Хотя возможность страницы предоставлять текст для диалогового окна beforeunload была удалена некоторое время назад, диалоговые окна beforeunload остаются источником злоупотреблений. В частности, диалоги beforeunload являются компонентом мошеннических веб-сайтов, где автоматическое воспроизведение звука и угрожающий текст создают контекст, в котором сообщение Chromium «Вы уверены, что хотите покинуть эту страницу» становится тревожным.

Мы хотим заправить иголку и разрешить только хорошее использование диалога beforeunload . Хорошее использование диалога — это те случаи, когда у пользователя есть состояние, которое может быть потеряно. Если пользователь никогда не взаимодействовал со страницей, то у пользователя не может быть никакого состояния, которое могло бы быть потеряно, и поэтому мы не рискуем потерей пользовательских данных, подавляя диалог в этом случае.