В сентябре 2017 года мы объявили о предстоящем изменении способа обработки звука с помощью политики автозапуска в Chrome. Изменение политики было выпущено в Chrome 66 Stable в мае 2018 года.
После отзывов сообщества разработчиков веб-аудио мы отложили выпуск части политики автозапуска, касающейся веб-аудио, чтобы дать разработчикам больше времени для обновления своих веб-сайтов. Мы также внесли некоторые изменения в реализацию политики веб-аудио, которая уменьшит количество веб-сайтов, которым необходимо корректировать свой код (особенно веб-игр), и, следовательно, обеспечит лучший опыт для наших пользователей.
Это изменение политики теперь планируется внедрить в Chrome 71 в декабре 2018 года .
Что конкретно дает изменение политики?
Автовоспроизведение — это имя, присвоенное фрагменту контента, который воспроизводится сразу после загрузки веб-страницы. Для веб-сайтов, которые должны иметь возможность автоматического воспроизведения своего контента, это изменение предотвратит воспроизведение по умолчанию. В большинстве случаев воспроизведение возобновится, но в других потребуется небольшая корректировка кода. В частности, разработчики должны добавить код, который возобновляет работу содержимого, если пользователь взаимодействует с веб-страницей.
Однако если пользователь попадает на страницу с контентом автозапуска и перешел на эту страницу со страницы того же происхождения, то этот контент никогда не будет заблокирован. Прочтите нашу предыдущую публикацию в блоге о политике автозапуска для получения более подробных примеров .
Кроме того, мы добавили эвристику, позволяющую изучить прошлое поведение пользователей в отношении веб-сайтов, на которых автоматически воспроизводится звук. Мы обнаруживаем, что пользователи регулярно позволяют воспроизводить аудио более 7 секунд во время большинства посещений веб-сайта, и включаем автозапуск для этого веб-сайта.
Мы делаем это с помощью индекса, который хранится локально для каждого профиля Chrome на устройстве — он не синхронизируется между устройствами и передается только как часть анонимной пользовательской статистики. Мы называем этот индекс Индексом вовлеченности СМИ (MEI), и вы можете просмотреть его через chrome://media-engagement.
MEI отслеживает, сколько посещений сайта сопровождается воспроизведением звука длительностью более 7 секунд. Мы считаем, что на основе MEI пользователя мы можем понять, ожидает ли пользователь аудио с определенного веб-сайта или нет, и предугадать намерения пользователя в будущем.
Если пользователь часто разрешает домену веб-сайта воспроизводить звук более 7 секунд, то в будущем мы предполагаем, что пользователь ожидает, что этот веб-сайт будет иметь право на автоматическое воспроизведение звука. Поэтому мы предоставляем этому веб-сайту право на автоматическое воспроизведение аудио, не требуя от пользователя взаимодействия с вкладкой из этого домена.
Однако это право не гарантируется на неопределенный срок. Если поведение пользователя меняется – например, останавливается воспроизведение аудио или закрывает вкладку в течение 7 секунд в течение нескольких посещений – мы лишаем веб-сайт права на автозапуск.
Использование мультимедийных HTML-элементов (видео и аудио) и веб-аудио (экземпляры объектов AudioContext, созданных в JavaScript) будет способствовать развитию MEI. При подготовке к внедрению этой политики поведение пользователей в отношении веб-аудио начнет вносить вклад в MEI, начиная с Chrome 70 и более поздних версий. Это гарантирует, что мы уже сможем предугадать желаемое намерение пользователя в отношении автозапуска и веб-сайтов, которые он обычно посещает.
Следует отметить, что iframe может получить право на автоматическое воспроизведение без взаимодействия с пользователем только в том случае, если родительская веб-страница, встраивающая iframe, расширяет это право на данный iframe .
Отсрочка изменений ради поддержки сообщества
Сообщество разработчиков веб-аудио, особенно разработчики веб-игр и разработчики WebRTC этого сообщества, обратили внимание, когда это изменение появилось в канале Chrome Stable.
По отзывам сообщества, это изменение отрицательно повлияет на многие веб-игры и веб-аудио — в частности, многие сайты, которые не были обновлены, больше не будут воспроизводить звук для пользователей. В результате наша команда решила, что стоит отложить это изменение, чтобы дать разработчикам веб-аудио больше времени для обновления своих веб-сайтов.
Кроме того, мы потратили это время на то, чтобы:
- Серьезно подумайте, было ли это изменение политики лучшим решением или нет.
- Узнайте, как мы можем помочь уменьшить количество веб-сайтов со звуком, на которые это повлияет.
В первом случае мы в конечном итоге решили, что изменение политики действительно необходимо для улучшения пользовательского опыта для большинства наших пользователей. Подробнее о том, какую проблему решает изменение политики, можно прочитать в следующем разделе этой статьи.
Что касается последнего, мы внесли коррективы в нашу реализацию веб-аудио, которая уменьшит количество первоначально затронутых веб-сайтов. Из известных нам сайтов, которые были повреждены в результате изменения (многие из которых были приведены в качестве примеров сообществом разработчиков веб-игр), эта корректировка означала, что более 80% из них будут работать автоматически. Наш анализ и тестирование этих примеров сайтов можно посмотреть здесь . Более подробно эта новая настройка описана ниже.
Мы также внесли изменения для поддержки приложений WebRTC; пока идет активный сеанс захвата, автовоспроизведение будет разрешено.
Какую проблему призвано решить такое изменение поведения?
Браузеры исторически плохо помогали пользователю управлять звуком. Когда пользователи открывают веб-страницу и получают звук, которого они не ожидали или не хотели, у них плохой пользовательский опыт. Этот плохой пользовательский опыт — проблема, которую мы пытаемся решить. Нежелательный шум — основная причина, по которой пользователи не хотят, чтобы их браузер автоматически воспроизводил контент.
Однако иногда пользователи хотят, чтобы контент воспроизводился автоматически, и впоследствии пользователь воспроизводит значительное количество заблокированных автозапусков в Chrome.
Поэтому мы считаем, что, учась у пользователя и предвидя его намерения для каждого веб-сайта, мы сможем создать лучший пользовательский опыт. Если пользователи склонны разрешать воспроизведение контента с веб-сайта, в будущем мы будем автоматически воспроизводить контент с этого сайта. И наоборот, если пользователи склонны прекращать автоматическое воспроизведение контента с определенного веб-сайта, мы по умолчанию запретим автозапуск этого контента.
Одним из предложений, выдвинутых сообществом, было отключить звук на вкладке вместо приостановки автозапуска. Однако мы считаем, что лучше остановить автозапуск, чтобы веб-сайт знал, что автозапуск заблокирован, и позволить разработчику веб-сайта отреагировать на это. Например, хотя некоторые разработчики могут захотеть просто отключить звук, другие разработчики могут предпочесть, чтобы их аудиоконтент был приостановлен до тех пор, пока пользователь активно не взаимодействует с контентом — в противном случае пользователь может пропустить часть звукового опыта.
Новые изменения в помощь разработчикам веб-игр
Наиболее распространенный способ использования API веб-аудио разработчиками — создание двух типов объектов для воспроизведения аудио:
- Аудиоконтекст
- И AudioNodes , которые привязаны к контексту.
Разработчики веб-аудио создадут AudioContext для воспроизведения аудио. Чтобы возобновить воспроизведение звука после того, как политика автозапуска автоматически приостановила их AudioContext, им необходимо вызвать функцию возобновления() для этого объекта после того, как пользователь взаимодействует с вкладкой:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
Существует множество интерфейсов, наследуемых от AudioNode, одним из которых является интерфейс AudioScheduledSourceNode . AudioNodes, реализующие интерфейс AudioScheduledSourceNode, обычно называются исходными узлами (например, AudioBufferSourceNode, ConstantSourceNode и OscillatorNode). Исходные узлы реализуют метод start().
Исходные узлы обычно представляют собой отдельные аудиофрагменты, которые воспроизводятся в играх, например: звук, который воспроизводится, когда игрок собирает монету, или фоновую музыку, которая играет на текущем этапе. Разработчики игр, скорее всего, будут вызывать функцию start() на исходных узлах всякий раз, когда какой-либо из этих звуков необходим для игры.
Как только мы осознали эту распространенную закономерность в веб-играх, мы решили скорректировать нашу реализацию следующим образом:
Аудиоконтекст будет возобновлен автоматически при выполнении двух условий:
- Пользователь взаимодействовал со страницей.
- Вызывается метод start() исходного узла.
Благодаря этому изменению звук в большинстве веб-игр теперь возобновляется, когда пользователь начинает играть в игру.
Движение Интернета вперед
Чтобы продвинуть веб-платформу вперед, иногда необходимо внести изменения, которые могут нарушить совместимость. К сожалению, автовоспроизведение аудио является сложным процессом и попадает в эту категорию изменений. Но этот сдвиг имеет решающее значение для того, чтобы Интернет не застоялся и не потерял своего инновационного преимущества.
Тем не менее, мы понимаем, что применение исправлений для веб-сайтов не всегда осуществимо в краткосрочной перспективе по ряду причин:
- Веб-разработчики могут быть сосредоточены на новом проекте, а обслуживание старого веб-сайта невозможно сразу.
- Порталы веб-игр могут не иметь контроля над внедрением игр в свой каталог, а обновление сотен, если не тысяч, игр может отнимать много времени и дорого для издателей.
- Некоторые веб-сайты могут быть просто очень старыми и по той или иной причине больше не поддерживаются, но все еще размещаются для исторических целей.
Вот короткий фрагмент кода JavaScript, который перехватывает создание новых объектов AudioContext и автоматически запускает функцию возобновления этих объектов, когда пользователь выполняет различные взаимодействия с пользователем. Этот код должен выполняться до создания любых объектов AudioContext на вашей веб-странице. Например, вы можете добавить этот код в тег вашей веб-страницы:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
Следует отметить, что этот фрагмент кода не поможет возобновить аудиоконтексты, экземпляры которых создаются внутри iframe, если только этот фрагмент кода не включен в область содержимого самого iframe.
Лучше обслуживать наших пользователей
В дополнение к изменению политики мы также вводим механизм, позволяющий пользователям отключать политику автозапуска, чтобы охватить случаи, когда автоматическое обучение не работает должным образом, или для веб-сайтов, которые из-за изменения стали непригодными для использования. Это изменение будет реализовано вместе с новой политикой в Chrome 71, и его можно найти в настройках звука; сайты, которым пользователь хочет разрешить автозапуск, можно добавить в список разрешенных.
Как устроен MEI для новых пользователей?
Как упоминалось ранее, мы автоматически создаем MEI с течением времени на основе поведения пользователя, чтобы предугадать его желаемое намерение в отношении данного веб-сайта с автоматическим воспроизведением контента. Каждый веб-сайт имеет оценку от нуля до единицы в этом индексе. Более высокие оценки указывают на то, что пользователь ожидает воспроизведения контента с этого веб-сайта.
Однако для новых профилей пользователей или если пользователь очищает свои данные просмотра, вместо того, чтобы везде блокировать автозапуск, для определения того, какие веб-сайты могут автоматически воспроизводиться, используется список предварительного заполнения, основанный на анонимизированных агрегированных показателях MEI пользователей. Эти данные определяют только исходное состояние MEI при создании профиля пользователя. Когда пользователь просматривает Интернет и взаимодействует с веб-сайтами с автоматически воспроизводимым контентом, его личный MEI переопределяет конфигурацию по умолчанию.
Предварительно заполненный список сайтов генерируется алгоритмически, а не курируется вручную, и в него может быть включен любой веб-сайт. Сайты добавляются в список, если достаточное количество пользователей, посещающих этот сайт, разрешают автозапуск на этом сайте. Этот порог основан на процентах, чтобы не отдавать предпочтение более крупным сайтам.
Поиск баланса
Мы опубликовали новую документацию, чтобы лучше понять наш процесс принятия решений и обоснование этой политики. А также новая документация о том, как работает предварительно заполненный список сайтов .
Мы всегда ставим наших пользователей на первое место, но мы также не хотим подводить сообщество веб-разработчиков. Иногда быть браузером означает, что эти две цели должны быть тщательно сбалансированы. Мы считаем, что благодаря нашим корректировкам реализации политики и дополнительному времени, которое мы предоставили разработчикам веб-аудио для обновления своего кода, мы достигнем этого баланса с Chrome 71.
Обратная связь
,В сентябре 2017 года мы объявили о предстоящем изменении способа обработки звука с помощью политики автозапуска в Chrome. Изменение политики было выпущено в Chrome 66 Stable в мае 2018 года.
После отзывов сообщества разработчиков веб-аудио мы отложили выпуск части политики автозапуска, касающейся веб-аудио, чтобы дать разработчикам больше времени для обновления своих веб-сайтов. Мы также внесли некоторые изменения в реализацию политики веб-аудио, которая уменьшит количество веб-сайтов, которым необходимо корректировать свой код (особенно веб-игр), и, следовательно, обеспечит лучший опыт для наших пользователей.
Это изменение политики теперь планируется внедрить в Chrome 71 в декабре 2018 года .
Что конкретно дает изменение политики?
Автовоспроизведение — это имя, присвоенное фрагменту контента, который воспроизводится сразу после загрузки веб-страницы. Для веб-сайтов, которые должны иметь возможность автоматического воспроизведения своего контента, это изменение предотвратит воспроизведение по умолчанию. В большинстве случаев воспроизведение возобновится, но в других потребуется небольшая корректировка кода. В частности, разработчики должны добавить код, который возобновляет работу содержимого, если пользователь взаимодействует с веб-страницей.
Однако если пользователь попадает на страницу с контентом автозапуска и перешел на эту страницу со страницы того же происхождения, то этот контент никогда не будет заблокирован. Прочтите нашу предыдущую публикацию в блоге о политике автозапуска для получения более подробных примеров .
Кроме того, мы добавили эвристику, позволяющую изучить прошлое поведение пользователей в отношении веб-сайтов, на которых автоматически воспроизводится звук. Мы обнаруживаем, что пользователи регулярно позволяют воспроизводить аудио более 7 секунд во время большинства посещений веб-сайта, и включаем автозапуск для этого веб-сайта.
Мы делаем это с помощью индекса, который хранится локально для каждого профиля Chrome на устройстве — он не синхронизируется между устройствами и передается только как часть анонимной пользовательской статистики. Мы называем этот индекс Индексом вовлеченности СМИ (MEI), и вы можете просмотреть его через chrome://media-engagement.
MEI отслеживает, сколько посещений сайта сопровождается воспроизведением звука длительностью более 7 секунд. Мы считаем, что на основе MEI пользователя мы можем понять, ожидает ли пользователь аудио с определенного веб-сайта или нет, и предугадать намерения пользователя в будущем.
Если пользователь часто разрешает домену веб-сайта воспроизводить звук более 7 секунд, то в будущем мы предполагаем, что пользователь ожидает, что этот веб-сайт будет иметь право на автоматическое воспроизведение звука. Поэтому мы предоставляем этому веб-сайту право на автоматическое воспроизведение аудио, не требуя от пользователя взаимодействия с вкладкой из этого домена.
Однако это право не гарантируется на неопределенный срок. Если поведение пользователя меняется – например, останавливается воспроизведение аудио или закрывает вкладку в течение 7 секунд в течение нескольких посещений – мы лишаем веб-сайт права на автозапуск.
Использование HTML-элементов мультимедиа (видео и аудио) и веб-аудио (экземпляры объектов AudioContext, созданных в JavaScript) будет способствовать развитию MEI. При подготовке к внедрению этой политики поведение пользователей в отношении веб-аудио начнет вносить вклад в MEI, начиная с Chrome 70 и более поздних версий. Это гарантирует, что мы уже сможем предугадать желаемое намерение пользователя в отношении автозапуска и веб-сайтов, которые он обычно посещает.
Следует отметить, что iframe может получить право на автоматическое воспроизведение без взаимодействия с пользователем только в том случае, если родительская веб-страница, встраивающая iframe, расширяет это право на данный iframe .
Отсрочка изменений ради поддержки сообщества
Сообщество разработчиков веб-аудио, особенно разработчики веб-игр и разработчики WebRTC этого сообщества, обратили внимание, когда это изменение появилось в канале Chrome Stable.
По отзывам сообщества, это изменение отрицательно повлияет на многие веб-игры и веб-аудио — в частности, многие сайты, которые не были обновлены, больше не будут воспроизводить звук для пользователей. В результате наша команда решила, что стоит отложить это изменение, чтобы дать разработчикам веб-аудио больше времени для обновления своих веб-сайтов.
Кроме того, мы потратили это время на то, чтобы:
- Серьезно подумайте, было ли это изменение политики лучшим решением или нет.
- Узнайте, как мы можем помочь уменьшить количество веб-сайтов со звуком, на которые это повлияет.
В первом случае мы в конечном итоге решили, что изменение политики действительно необходимо для улучшения пользовательского опыта для большинства наших пользователей. Подробнее о том, какую проблему решает изменение политики, можно прочитать в следующем разделе этой статьи.
Что касается последнего, мы внесли коррективы в нашу реализацию веб-аудио, которая уменьшит количество первоначально затронутых веб-сайтов. Из известных нам сайтов, которые были повреждены в результате изменения (многие из которых были приведены в качестве примеров сообществом разработчиков веб-игр), эта корректировка означала, что более 80% из них будут работать автоматически. Наш анализ и тестирование этих примеров сайтов можно посмотреть здесь . Более подробно эта новая настройка описана ниже.
Мы также внесли изменения для поддержки приложений WebRTC; пока идет активный сеанс захвата, автовоспроизведение будет разрешено.
Какую проблему призвано решить такое изменение поведения?
Браузеры исторически плохо помогали пользователю управлять звуком. Когда пользователи открывают веб-страницу и получают звук, которого они не ожидали или не хотели, у них плохой пользовательский опыт. Этот плохой пользовательский опыт — проблема, которую мы пытаемся решить. Нежелательный шум — основная причина, по которой пользователи не хотят, чтобы их браузер автоматически воспроизводил контент.
Однако иногда пользователи хотят, чтобы контент воспроизводился автоматически, и впоследствии пользователь воспроизводит значительное количество заблокированных автозапусков в Chrome.
Поэтому мы считаем, что, учась у пользователя и предвидя его намерения для каждого веб-сайта, мы сможем создать лучший пользовательский опыт. Если пользователи склонны разрешать воспроизведение контента с веб-сайта, в будущем мы будем автоматически воспроизводить контент с этого сайта. И наоборот, если пользователи склонны прекращать автоматическое воспроизведение контента с определенного веб-сайта, мы по умолчанию запретим автозапуск этого контента.
Одним из предложений, выдвинутых сообществом, было отключить звук на вкладке вместо приостановки автозапуска. Однако мы считаем, что лучше остановить автозапуск, чтобы веб-сайт знал, что автозапуск заблокирован, и позволить разработчику веб-сайта отреагировать на это. Например, хотя некоторые разработчики могут захотеть просто отключить звук, другие разработчики могут предпочесть, чтобы их аудиоконтент был приостановлен до тех пор, пока пользователь активно не взаимодействует с контентом — в противном случае пользователь может пропустить часть звукового опыта.
Новые изменения в помощь разработчикам веб-игр
Наиболее распространенный способ использования API веб-аудио разработчиками — создание двух типов объектов для воспроизведения аудио:
- Аудиоконтекст
- И AudioNodes , которые привязаны к контексту.
Разработчики веб-аудио создадут AudioContext для воспроизведения аудио. Чтобы возобновить воспроизведение звука после того, как политика автозапуска автоматически приостановила их AudioContext, им необходимо вызвать функцию возобновления() для этого объекта после того, как пользователь взаимодействует с вкладкой:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
Существует множество интерфейсов, наследуемых от AudioNode, одним из которых является интерфейс AudioScheduledSourceNode . AudioNodes, реализующие интерфейс AudioScheduledSourceNode, обычно называются исходными узлами (например, AudioBufferSourceNode, ConstantSourceNode и OscillatorNode). Исходные узлы реализуют метод start().
Исходные узлы обычно представляют собой отдельные аудиофрагменты, которые воспроизводятся в играх, например: звук, который воспроизводится, когда игрок собирает монету, или фоновую музыку, которая играет на текущем этапе. Разработчики игр, скорее всего, будут вызывать функцию start() на исходных узлах всякий раз, когда какой-либо из этих звуков необходим для игры.
Как только мы осознали эту распространенную закономерность в веб-играх, мы решили скорректировать нашу реализацию следующим образом:
Аудиоконтекст будет возобновлен автоматически при выполнении двух условий:
- Пользователь взаимодействовал со страницей.
- Вызывается метод start() исходного узла.
Благодаря этому изменению звук в большинстве веб-игр теперь возобновляется, когда пользователь начинает играть в игру.
Движение Интернета вперед
Чтобы продвинуть веб-платформу вперед, иногда необходимо внести изменения, которые могут нарушить совместимость. К сожалению, автовоспроизведение аудио является сложным процессом и попадает в эту категорию изменений. Но этот сдвиг имеет решающее значение для того, чтобы Интернет не застоялся и не потерял своего инновационного преимущества.
Тем не менее, мы понимаем, что применение исправлений для веб-сайтов не всегда осуществимо в краткосрочной перспективе по ряду причин:
- Веб-разработчики могут быть сосредоточены на новом проекте, а обслуживание старого веб-сайта невозможно сразу.
- Порталы веб-игр могут не иметь контроля над внедрением игр в свой каталог, а обновление сотен, если не тысяч, игр может отнимать много времени и дорого для издателей.
- Некоторые веб-сайты могут быть просто очень старыми и по той или иной причине больше не поддерживаются, но все еще размещаются для исторических целей.
Вот короткий фрагмент кода JavaScript, который перехватывает создание новых объектов AudioContext и автоматически запускает функцию возобновления этих объектов, когда пользователь выполняет различные взаимодействия с пользователем. Этот код должен выполняться до создания любых объектов AudioContext на вашей веб-странице. Например, вы можете добавить этот код в тег вашей веб-страницы:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
Следует отметить, что этот фрагмент кода не поможет возобновить аудиоконтексты, экземпляры которых создаются внутри iframe, если только этот фрагмент кода не включен в область содержимого самого iframe.
Лучше обслуживать наших пользователей
В дополнение к изменению политики мы также вводим механизм, позволяющий пользователям отключать политику автозапуска, чтобы охватить случаи, когда автоматическое обучение не работает должным образом, или для веб-сайтов, которые из-за изменения стали непригодными для использования. Это изменение будет реализовано вместе с новой политикой в Chrome 71, и его можно найти в настройках звука; сайты, которым пользователь хочет разрешить автозапуск, можно добавить в список разрешенных.
Как устроен MEI для новых пользователей?
Как упоминалось ранее, мы автоматически создаем MEI с течением времени на основе поведения пользователя, чтобы предугадать его желаемое намерение в отношении данного веб-сайта с автоматическим воспроизведением контента. Каждый веб-сайт имеет оценку от нуля до единицы в этом индексе. Более высокие оценки указывают на то, что пользователь ожидает воспроизведения контента с этого веб-сайта.
Однако для новых профилей пользователей или если пользователь очищает свои данные просмотра, вместо того, чтобы везде блокировать автозапуск, для определения того, какие веб-сайты могут автоматически воспроизводиться, используется список предварительного заполнения, основанный на анонимизированных агрегированных показателях MEI пользователей. Эти данные определяют только исходное состояние MEI при создании профиля пользователя. Когда пользователь просматривает Интернет и взаимодействует с веб-сайтами с автоматически воспроизводимым контентом, его личный MEI переопределяет конфигурацию по умолчанию.
Предварительно заполненный список сайтов генерируется алгоритмически, а не курируется вручную, и в него может быть включен любой веб-сайт. Сайты добавляются в список, если достаточное количество пользователей, посещающих этот сайт, разрешают автозапуск на этом сайте. Этот порог основан на процентах, чтобы не отдавать предпочтение более крупным сайтам.
Поиск баланса
Мы опубликовали новую документацию, чтобы лучше понять наш процесс принятия решений и обоснование этой политики. А также новая документация о том, как работает предварительно заполненный список сайтов .
Мы всегда ставим наших пользователей на первое место, но мы также не хотим подводить сообщество веб-разработчиков. Иногда быть браузером означает, что эти две цели должны быть тщательно сбалансированы. Мы считаем, что благодаря нашим корректировкам реализации политики и дополнительному времени, которое мы предоставили разработчикам веб-аудио для обновления своего кода, мы достигнем этого баланса с Chrome 71.
Обратная связь
,В сентябре 2017 года мы объявили о предстоящем изменении способа обработки звука с помощью политики автозапуска в Chrome. Изменение политики было выпущено в Chrome 66 Stable в мае 2018 года.
После отзывов сообщества разработчиков веб-аудио мы отложили выпуск части политики автозапуска, касающейся веб-аудио, чтобы дать разработчикам больше времени для обновления своих веб-сайтов. Мы также внесли некоторые изменения в реализацию политики веб-аудио, которая уменьшит количество веб-сайтов, которым необходимо корректировать свой код (особенно веб-игр), и, следовательно, обеспечит лучший опыт для наших пользователей.
Это изменение политики теперь планируется внедрить в Chrome 71 в декабре 2018 года .
Что конкретно дает изменение политики?
Автовоспроизведение — это имя, присвоенное фрагменту контента, который воспроизводится сразу после загрузки веб-страницы. Для веб-сайтов, которые должны иметь возможность автоматического воспроизведения своего контента, это изменение предотвратит воспроизведение по умолчанию. В большинстве случаев воспроизведение возобновится, но в других потребуется небольшая корректировка кода. В частности, разработчики должны добавить код, который возобновляет работу содержимого, если пользователь взаимодействует с веб-страницей.
Однако если пользователь попадает на страницу с контентом автозапуска и перешел на эту страницу со страницы того же происхождения, то этот контент никогда не будет заблокирован. Прочтите нашу предыдущую публикацию в блоге о политике автозапуска для получения более подробных примеров .
Кроме того, мы добавили эвристику, позволяющую изучить прошлое поведение пользователей в отношении веб-сайтов, на которых автоматически воспроизводится звук. Мы обнаруживаем, что пользователи регулярно воспроизводят аудио более 7 секунд во время большинства посещений веб-сайта, и включаем автозапуск для этого веб-сайта.
Мы делаем это с помощью индекса, который хранится локально для каждого профиля Chrome на устройстве — он не синхронизируется между устройствами и передается только как часть анонимной пользовательской статистики. Мы называем этот индекс Индексом вовлеченности СМИ (MEI), и вы можете просмотреть его через chrome://media-engagement.
MEI отслеживает, сколько посещений сайта сопровождается воспроизведением звука длительностью более 7 секунд. Мы считаем, что на основе MEI пользователя мы можем понять, ожидает ли пользователь аудио с определенного веб-сайта или нет, и предугадать намерения пользователя в будущем.
Если пользователь часто разрешает домену веб-сайта воспроизводить звук более 7 секунд, то в будущем мы предполагаем, что пользователь ожидает, что этот веб-сайт будет иметь право на автоматическое воспроизведение звука. Поэтому мы предоставляем этому веб-сайту право на автоматическое воспроизведение аудио, не требуя от пользователя взаимодействия с вкладкой из этого домена.
Однако это право не гарантируется на неопределенный срок. Если поведение пользователя меняется – например, останавливается воспроизведение аудио или закрывает вкладку в течение 7 секунд в течение нескольких посещений – мы лишаем веб-сайт права на автозапуск.
Использование HTML-элементов мультимедиа (видео и аудио) и веб-аудио (экземпляры объектов AudioContext, созданных в JavaScript) будет способствовать развитию MEI. При подготовке к внедрению этой политики поведение пользователей в отношении веб-аудио начнет вносить вклад в MEI, начиная с Chrome 70 и более поздних версий. Это гарантирует, что мы уже сможем предугадать желаемое намерение пользователя в отношении автозапуска и веб-сайтов, которые он обычно посещает.
Следует отметить, что iframe может получить право на автоматическое воспроизведение без взаимодействия с пользователем только в том случае, если родительская веб-страница, встраивающая iframe, расширяет это право на данный iframe .
Отсрочка изменений ради поддержки сообщества
Сообщество разработчиков веб-аудио, особенно разработчики веб-игр и разработчики WebRTC этого сообщества, обратили внимание, когда это изменение появилось в канале Chrome Stable.
По отзывам сообщества, это изменение отрицательно повлияет на многие веб-игры и веб-аудио — в частности, многие сайты, которые не были обновлены, больше не будут воспроизводить звук для пользователей. В результате наша команда решила, что стоит отложить это изменение, чтобы дать разработчикам веб-аудио больше времени для обновления своих веб-сайтов.
Кроме того, мы потратили это время на то, чтобы:
- Серьезно подумайте, было ли это изменение политики лучшим решением или нет.
- Узнайте, как мы можем помочь уменьшить количество веб-сайтов со звуком, на которые это повлияет.
В первом случае мы в конечном итоге решили, что изменение политики действительно необходимо для улучшения пользовательского опыта для большинства наших пользователей. Подробнее о том, какую проблему решает изменение политики, можно прочитать в следующем разделе этой статьи.
Что касается последнего, мы внесли коррективы в нашу реализацию веб-аудио, которая уменьшит количество первоначально затронутых веб-сайтов. Из известных нам сайтов, которые были повреждены в результате изменения (многие из которых были приведены в качестве примеров сообществом разработчиков веб-игр), эта корректировка означала, что более 80% из них будут работать автоматически. Наш анализ и тестирование этих примеров сайтов можно посмотреть здесь . Более подробно эта новая настройка описана ниже.
Мы также внесли изменения для поддержки приложений WebRTC; пока идет активный сеанс захвата, автовоспроизведение будет разрешено.
Какую проблему призвано решить такое изменение поведения?
Браузеры исторически плохо помогали пользователю управлять звуком. Когда пользователи открывают веб-страницу и получают звук, которого они не ожидали или не хотели, у них плохой пользовательский опыт. Этот плохой пользовательский опыт — проблема, которую мы пытаемся решить. Нежелательный шум — основная причина, по которой пользователи не хотят, чтобы их браузер автоматически воспроизводил контент.
Однако иногда пользователи хотят, чтобы контент воспроизводился автоматически, и впоследствии пользователь воспроизводит значительное количество заблокированных автозапусков в Chrome.
Поэтому мы считаем, что, учась у пользователя и предвидя его намерения для каждого веб-сайта, мы сможем создать лучший пользовательский опыт. Если пользователи склонны разрешать воспроизведение контента с веб-сайта, в будущем мы будем автоматически воспроизводить контент с этого сайта. И наоборот, если пользователи склонны прекращать автоматическое воспроизведение контента с определенного веб-сайта, мы по умолчанию запретим автозапуск этого контента.
Одним из предложений, выдвинутых сообществом, было отключить звук на вкладке вместо приостановки автозапуска. Однако мы считаем, что лучше остановить автозапуск, чтобы веб-сайт знал, что автозапуск заблокирован, и позволить разработчику веб-сайта отреагировать на это. Например, хотя некоторые разработчики могут захотеть просто отключить звук, другие разработчики могут предпочесть, чтобы их аудиоконтент был приостановлен до тех пор, пока пользователь активно не взаимодействует с контентом — в противном случае пользователь может пропустить часть звукового опыта.
Новые изменения в помощь разработчикам веб-игр
Наиболее распространенный способ использования API веб-аудио разработчиками — создание двух типов объектов для воспроизведения аудио:
- Аудиоконтекст
- И AudioNodes , которые привязаны к контексту.
Разработчики веб-аудио создадут AudioContext для воспроизведения аудио. Чтобы возобновить воспроизведение звука после того, как политика автозапуска автоматически приостановила их AudioContext, им необходимо вызвать функцию возобновления() для этого объекта после того, как пользователь взаимодействует с вкладкой:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
Существует множество интерфейсов, наследуемых от AudioNode, одним из которых является интерфейс AudioScheduledSourceNode . AudioNodes, реализующие интерфейс AudioScheduledSourceNode, обычно называются исходными узлами (например, AudioBufferSourceNode, ConstantSourceNode и OscillatorNode). Исходные узлы реализуют метод start().
Исходные узлы обычно представляют собой отдельные аудиофрагменты, которые воспроизводятся в играх, например: звук, который воспроизводится, когда игрок собирает монету, или фоновую музыку, которая играет на текущем этапе. Разработчики игр, скорее всего, будут вызывать функцию start() на исходных узлах всякий раз, когда какой-либо из этих звуков необходим для игры.
Как только мы осознали эту распространенную закономерность в веб-играх, мы решили скорректировать нашу реализацию следующим образом:
Аудиоконтекст будет возобновлен автоматически, когда будут выполнены два условия:
- Пользователь взаимодействовал со страницей.
- Способ start () узел исходного узла вызывается.
Из -за этого изменения большинство веб -игр теперь возобновит свой звук, когда пользователь начнет играть в игру.
Перемещение сети вперед
Чтобы перемещать веб -платформу вперед, иногда необходимо внести изменения, которые могут нарушить совместимость. К сожалению, аудио -автооплата сложна и попадает в эту категорию изменений. Но сделать этот сдвиг имеет решающее значение, чтобы гарантировать, что сеть не застаивает и не потеряла свое инновационное преимущество.
Тем не менее, мы признаем, что применение исправлений для веб -сайтов не всегда возможно в краткосрочной перспективе по разным причинам:
- Веб -разработчики могут быть сосредоточены на новом проекте, а обслуживание на старом веб -сайте не сразу возможно.
- Порталы веб -игр, возможно, не контролируют реализацию игр в их каталоге и обновления сотен - если не тысячи - игр могут занять много времени и дорого для издателей.
- Некоторые веб -сайты могут быть просто очень старыми и - по той или иной причине - больше не поддерживаются, но все еще размещены для исторических целей.
Вот короткий фрагмент кода JavaScript, который перехватывает создание новых объектов аудиоконтексов и будет автотриггером функции резюме этих объектов, когда пользователь выполняет различные взаимодействия пользователей. Этот код должен быть выполнен до создания любых объектов аудиоконтексов на вашей веб -странице - например, вы можете добавить этот код в тег вашей веб -страницы:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
Следует отметить, что этот фрагмент кода не поможет в возобновлении аудиоконтексов, которые создаются в IFRAME, если только этот фрагмент кода не включен в объем содержания самого iframe.
Лучше обслуживать наших пользователей
Чтобы сопровождать изменение политики, мы также представляем для пользователей механизм отключения политики автоматической политики, чтобы охватить случаи, когда автоматическое обучение не работает, как и ожидалось, или для веб -сайтов, которые становятся непригодными для использования изменениями. Это изменение будет развернуться с новой политикой в Chrome 71 и может быть найдено в настройках звука; Сайты, где пользователь хочет разрешить Autoplay, могут быть добавлены в список разрешений.
Как создается MEI для новых пользователей?
Как упоминалось ранее, мы автоматически создаем MEI с течением времени, основываясь на поведении пользователя, чтобы предвидеть их желаемое намерение в отношении данного веб -сайта с контентом Autoplay. Каждый веб -сайт имеет оценку от нуля и одного в этом индексе. Более высокие оценки указывают на то, что пользователь ожидает, что контент будет воспроизводиться с этого веб -сайта.
Тем не менее, для новых профилей пользователей или, если пользователь очищает свои данные о просмотре, вместо того, чтобы блокировать автоматическое развлечение повсюду, предварительный список, основанный на анонимизированных агрегированных пользовательских показателях MEI, используется для определения того, какие веб-сайты могут автоматически раскрыться. Эти данные определяют начальное состояние MEI только при создании профиля пользователя. Поскольку пользователь просматривает Интернет и взаимодействует с веб -сайтами с контентом Autoplay, их личный MEI переопределяет конфигурацию по умолчанию.
Предварительный список сайтов сгенерирован алгоритмически, а не куратор вручную, и любой веб-сайт имеет право на включение. Сайты добавляются в список, если достаточно пользователей, которые посещают этот сайт, разрешают автоматическое разрешение на этом сайте. Этот порог основан на процентах, чтобы не отдавать предпочтение более крупным сайтам.
Поиск баланса
Мы опубликовали новую документацию, чтобы дать больше понимания нашего процесса принятия решений и обоснования дизайна этой политики. А также новая документация о том, как работает предварительно смягченный список сайтов .
Мы всегда ставим наших пользователей на первое место, но мы также не хотим отпускать сообщество веб -разработки. Иногда быть браузером означает, что эти две цели должны быть тщательно сбалансированы. Мы считаем, что с помощью наших корректировок в реализацию политики и дополнительное время, которое мы предоставили разработчикам веб -аудио, чтобы обновить свой код, мы достигнем этого баланса с Chrome 71.
Обратная связь
,В сентябре 2017 года мы объявили о предстоящем изменении того, как аудио будет обрабатываться с политикой поведения автоматического поведения в Chrome. Изменение политики было выпущено со стабильной CHROME 66 в мае 2018 года.
После отзывов сообщества разработки веб -аудио мы отложили выпуск веб -аудио -части политики Autoplay, чтобы дать разработчикам больше времени для обновления своих веб -сайтов. Мы также внесли некоторые изменения в реализацию политики для веб -аудио, которая уменьшит количество веб -сайтов, которые необходимо регулировать свой код - особенно веб -игры - и, следовательно, обеспечат лучший опыт для наших пользователей.
Это изменение политики теперь планируется развернуться с Chrome 71 в декабре 2018 года .
Что именно изменение политики делает?
Autoplay - это название, данное части контента, которая немедленно воспроизводит загрузку веб -страницы. Для веб -сайтов, которые, как ожидается, смогут автоматически создавать свой контент, это изменение по умолчанию предотвратит воспроизведение. В большинстве случаев воспроизведение будет возобновлено, но в других потребуется небольшая корректировка кода. В частности, разработчики должны добавить код, который возобновляет их контент, если пользователь взаимодействует с веб -страницей.
Однако, если пользователь прибывает на странице с контентом автопроизводства, и он перешел на эту страницу со страницы того же происхождения, то этот контент никогда не будет заблокирован. Прочитайте наше предыдущее сообщение в блоге о Политике Autoplay для более подробных примеров .
Кроме того, мы добавили эвристику, чтобы учиться на прошлом поведении пользователей в отношении веб -сайтов, которые автоматические аудио. Мы обнаруживаем, когда пользователи регулярно позволяют аудио играть в течение более 7 секунд во время большей части своих посещений на веб -сайте и обеспечивают автозапрограмму для этого веб -сайта.
Мы делаем это с помощью индекса, который хранится локально для профиля Chrome на устройстве - он не синхронизируется между устройствами и используется только как часть анонимной статистики пользователей. Мы называем этот индекс индексом взаимодействия со СМИ (MEI), и вы можете просмотреть его через Chrome: // Media-Engental.
MEI отслеживает, сколько посещений на сайте включает воспроизведение звука, которое длится более 7 секунд. Основываясь на MEI пользователя, мы считаем, что можем понять, ожидает ли пользователь звук от конкретного веб -сайта или нет - и предвидит намерение пользователя в будущем.
Если пользователь часто позволяет домену веб -сайта воспроизводить аудио в течение более 7 секунд, то в будущем мы предполагаем, что пользователь ожидает, что этот веб -сайт будет иметь право на автозаправление аудио. Поэтому мы предоставляем этому веб -сайту право на автозаправление аудио, не требуя, чтобы пользователь взаимодействовал с вкладкой из этого домена.
Однако это право не гарантировано бесконечно. Если переключатели поведения пользователя - например, остановка воспроизведения звука или закрытие вкладки в течение 7 секунд в течение нескольких посещений, - тогда мы удаляем право на автозаправление веб -сайта.
Использование Media HTML -элементов (видео и аудио), так и веб -аудио (javascript commandiated AudioContext Objects) будут способствовать MEI. При подготовке к развертыванию этого поведения пользователя политики в отношении веб -аудио начнет участвовать в MEI из Chrome 70 и далее. Это гарантирует, что мы уже сможем предвидеть желаемое намерение пользователя в отношении Autoplay и веб -сайтов, которые они обычно посещают.
Следует отметить, что iframes может получить право на автозаправление без взаимодействия с пользователем только в том случае, если родительская веб -страница, которая внедряет iframe, расширяет это право на заданный iframe .
Задержка изменений для поддержки сообщества
Сообщество разработчиков веб -аудио - особенно разработчика веб -игр и участков разработчика WEBRTC этого сообщества - обратили внимание, когда это изменение появилось на хромированном стабильном канале.
Отзывы сообщества заключались в том, что многие веб -игры и опыт веб -аудио будут негативно повлиять на это изменение - в частности, многие сайты, которые не были обновлены, больше не будут воспроизводить аудио для пользователей. В результате наша команда решила, что стоит отложить это изменение, чтобы дать разработчикам веб -аудио больше времени для обновления своих веб -сайтов.
Кроме того, мы взяли на это время:
- Серьезно подумайте, было ли это изменение политики лучшим курсом действий или нет.
- Исследуйте, как мы могли бы помочь уменьшить количество веб -сайтов с помощью аудио, которое будет повлиять.
Для первого мы в конечном итоге решили, что изменение политики действительно необходимо для улучшения пользовательского опыта для большинства наших пользователей. Более подробную информацию о том, какая проблема решает политику, можно прочитать в следующем разделе этой статьи.
Для последнего мы внесли корректировку к нашей реализации для веб -аудио, что уменьшит количество веб -сайтов, которые первоначально повлияли. Из сайтов, которые мы знали, были нарушены изменения - многие из которых были предоставлены в качестве примеров сообществом разработки веб -игр - эта корректировка означала, что более 80% из них будут работать автоматически. Наш анализ и тестирование этих примеров сайтов можно просмотреть здесь . Эта новая корректировка описана более подробно ниже.
Мы также внесли изменения в поддержку приложений WEBRTC; В то время как есть активное сеанс захвата, Autoplay будет разрешен.
Какую проблему является изменение поведения, стремящегося решить?
Исторически браузеры были плохими, помогая пользователю управлять звуком. Когда пользователи открывают веб -страницу и получают звук, который они не ожидали или не хотели, у них плохой пользовательский опыт. Этот плохой пользовательский опыт - проблема, которую мы пытаемся решить. Нежелательный шум является основной причиной того, что пользователи не хотят, чтобы его браузер автоматически создавал контент.
Тем не менее, иногда пользователи хотят, чтобы контент для автоматического раздела, а значимое количество заблокированных автооплат в Chrome впоследствии играют пользователь.
Поэтому мы считаем, что, узнав у пользователя - и ожидая их намерения на основе веб -сайта - мы можем создать лучший пользовательский опыт. Если пользователи, как правило, позволят контенту воспроизводиться с веб -сайта, мы будем автоматически создавать контент с этого сайта в будущем. И наоборот, если пользователи, как правило, останавливают контент Autoplay с данного веб -сайта, мы по умолчанию предотвратим автоматическое разрешение для этого контента.
Одним из предложений, выдвинуто сообществом, было отключить звук вкладки вместо того, чтобы приостановить автозапрограмму. Тем не менее, мы считаем, что лучше остановить опыт работы с автозапрограммой, чтобы веб -сайт знал, что автопроизводство было заблокировано, и позволил разработчику веб -сайта реагировать на это. Например, в то время как некоторые разработчики могут просто отключить звук, другие разработчики могут предпочесть приостановить приостановку аудиоконтента, пока пользователь активно не взаимодействует с контентом - в противном случае пользователь может пропустить часть аудио -опыта.
Новые корректировки, чтобы помочь разработчикам веб -игр
Наиболее распространенный способ, которым разработчики используют API Web Audio, - это создание двух типов объектов для воспроизведения Audio:
- Аудиоконтекст
- И Audionodes , которые прикреплены к контексту
Разработчики веб -аудио создаст аудиоконтекст для воспроизведения аудио. Чтобы возобновить их звук после того, как политика автозаправления автоматически приостановила свой аудиоконтекст, им необходимо вызвать функцию resume () на этом объекте после того, как пользователь взаимодействует с вкладкой:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
Существует много интерфейсов, которые наследуют от Audionode, одним из которых является интерфейс Audioschedsourcenode . Audionodes, которые реализуют интерфейс AudioshedSourcenode, обычно называют исходными узлами (такие как AudioBufferSourCenode, ConstantAntourcenode и Oscillatorornode). Исходные узлы реализуют метод start ().
Например, узлы исходных узлов обычно представляют отдельные аудио фрагменты, которые играют в играх: звук, который воспроизводится, когда игрок собирает монету или фоновую музыку, которая играет на нынешнем этапе. Разработчики игр, скорее всего, будут вызывать функцию start () в узлах исходных узлов, когда какой -либо из этих звуков необходим для игры.
Как только мы узнали этот общий шаблон в веб -играх, мы решили скорректировать нашу реализацию к следующему:
Аудиоконтекст будет возобновлен автоматически, когда будут выполнены два условия:
- Пользователь взаимодействовал со страницей.
- Способ start () узел исходного узла вызывается.
Из -за этого изменения большинство веб -игр теперь возобновит свой звук, когда пользователь начнет играть в игру.
Перемещение сети вперед
Чтобы перемещать веб -платформу вперед, иногда необходимо внести изменения, которые могут нарушить совместимость. К сожалению, аудио -автооплата сложна и попадает в эту категорию изменений. Но сделать этот сдвиг имеет решающее значение, чтобы гарантировать, что сеть не застаивает и не потеряла свое инновационное преимущество.
Тем не менее, мы признаем, что применение исправлений для веб -сайтов не всегда возможно в краткосрочной перспективе по разным причинам:
- Веб -разработчики могут быть сосредоточены на новом проекте, а обслуживание на старом веб -сайте не сразу возможно.
- Порталы веб -игр, возможно, не контролируют реализацию игр в их каталоге и обновления сотен - если не тысячи - игр могут занять много времени и дорого для издателей.
- Некоторые веб -сайты могут быть просто очень старыми и - по той или иной причине - больше не поддерживаются, но все еще размещены для исторических целей.
Вот короткий фрагмент кода JavaScript, который перехватывает создание новых объектов аудиоконтексов и будет автотриггером функции резюме этих объектов, когда пользователь выполняет различные взаимодействия пользователей. Этот код должен быть выполнен до создания любых объектов аудиоконтексов на вашей веб -странице - например, вы можете добавить этот код в тег вашей веб -страницы:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
Следует отметить, что этот фрагмент кода не поможет в возобновлении аудиоконтексов, которые создаются в IFRAME, если только этот фрагмент кода не включен в объем содержания самого iframe.
Лучше обслуживать наших пользователей
Чтобы сопровождать изменение политики, мы также представляем для пользователей механизм отключения политики автоматической политики, чтобы охватить случаи, когда автоматическое обучение не работает, как и ожидалось, или для веб -сайтов, которые становятся непригодными для использования изменениями. Это изменение будет развернуться с новой политикой в Chrome 71 и может быть найдено в настройках звука; Сайты, где пользователь хочет разрешить Autoplay, могут быть добавлены в список разрешений.
Как создается MEI для новых пользователей?
Как упоминалось ранее, мы автоматически создаем MEI с течением времени, основываясь на поведении пользователя, чтобы предвидеть их желаемое намерение в отношении данного веб -сайта с контентом Autoplay. Каждый веб -сайт имеет оценку от нуля и одного в этом индексе. Более высокие оценки указывают на то, что пользователь ожидает, что контент будет воспроизводиться с этого веб -сайта.
Тем не менее, для новых профилей пользователей или, если пользователь очищает свои данные о просмотре, вместо того, чтобы блокировать автоматическое развлечение повсюду, предварительный список, основанный на анонимизированных агрегированных пользовательских показателях MEI, используется для определения того, какие веб-сайты могут автоматически раскрыться. Эти данные определяют начальное состояние MEI только при создании профиля пользователя. Поскольку пользователь просматривает Интернет и взаимодействует с веб -сайтами с контентом Autoplay, их личный MEI переопределяет конфигурацию по умолчанию.
Предварительный список сайтов сгенерирован алгоритмически, а не куратор вручную, и любой веб-сайт имеет право на включение. Сайты добавляются в список, если достаточно пользователей, которые посещают этот сайт, разрешают автоматическое разрешение на этом сайте. Этот порог основан на процентах, чтобы не отдавать предпочтение более крупным сайтам.
Поиск баланса
Мы опубликовали новую документацию, чтобы дать больше понимания нашего процесса принятия решений и обоснования дизайна этой политики. А также новая документация о том, как работает предварительно смягченный список сайтов .
Мы всегда ставим наших пользователей на первое место, но мы также не хотим отпускать сообщество веб -разработки. Иногда быть браузером означает, что эти две цели должны быть тщательно сбалансированы. Мы считаем, что с помощью наших корректировок в реализацию политики и дополнительное время, которое мы предоставили разработчикам веб -аудио, чтобы обновить свой код, мы достигнем этого баланса с Chrome 71.