В настоящее время я работаю над веб-проектом, и мне нужно начать воспроизведение видео после события салфетки, и я не могу выполнить эту работу. Я использую видеопроигрыватель HTML5 и JS для обнаружения события салфетки. Сначала я попытался использовать hammer.js, что облегчает обнаружение событий салфетки, но после попытки получить эту работу я начал использовать простые js.
После некоторой отладки я заметил, что метод воспроизведения видео HTMLElement возвращает обещание. Когда я вызываю video.play()
из моего обработчика, это обещание всегда отклоняется со следующим сообщением:
NotAllowedError (DOM Exception 35): запрос не разрешен агентом пользователя или платформой в текущем контексте, возможно, потому что пользователь отказал в разрешении.
Поскольку эта проблема существует только в iOS, я начал читать документы разработчиков Apple и заметил, что многие функции доступны только после "явного действия пользователя". Например:
Важно: метод webkitEnterFullscreen() может быть вызван только в ответ на действие пользователя, например, нажатие кнопки. Например, вы не можете вызвать webkitEnterFullscreen() в ответ на событие загрузки.
То же самое относится к вызову метода воспроизведения из js. Он будет работать, только если он был вызван в ответ на действие пользователя.
Мой вопрос здесь в том, как яблоко определяет "действие пользователя"? Потому что, по-видимому, салфетки событий не являются действиями пользователя.
Я не уверен, что у них есть четкое определение, но для видео он обычно "нажимает" кнопку воспроизведения.
Это имеет смысл с одной точки зрения - мышление может заключаться в том, что ошибки часто связаны с увольнением чего-либо и, следовательно, не хорошим кандидатом, позволяющим начать видео.
Причина чувствительности к видео обычно связана с тем, что пользователи случайно запускают большие счета данных в мобильных соединениях.
В наши дни это, по-видимому, вызывает меньше беспокойства - например, последние версии iOS теперь поддерживают встроенное видеовоспроизведение на iPhone, которое было заблокировано в прошлом.