Сделать проигрыватель YouTube полноэкранным с помощью JavaScript

Я сталкиваюсь с ошибкой, когда проигрыватель YouTube переходит в полноэкранный режим с помощью JavaScript.

У меня есть кнопка, при нажатии на которую она запускает метод YT.Player.playVideo(), в то же время запрашивая содержащий iframe для перехода в полноэкранный режим следующим образом:

thisVid = document.getElementById("ytIframe");

if (thisVid.requestFullscreen) {
    thisVid.requestFullscreen();
}
else if (thisVid.msRequestFullscreen) {
    thisVid.msRequestFullscreen();
}
else if (thisVid.mozRequestFullScreen) {
    thisVid.mozRequestFullScreen();
}
else if (thisVid.webkitRequestFullScreen) {
    thisVid.webkitRequestFullScreen();
}

(Это использует ответы Stack Overflow здесь и здесь)

iframe успешно занимает экран, однако проигрыватель YouTube не знает, что он находится в полноэкранном режиме, потому что полноэкранная кнопка в правом нижнем углу все еще доступна: Доступен полноэкранный режим

Когда я нажимаю на него, он остается в полноэкранном режиме, и мне сообщается, что "youtube.com теперь в полноэкранном режиме":Теперь YouTube в полноэкранном режиме

Это проблема, потому что пользователю нужно дважды щелкнуть кнопку, чтобы выйти из полноэкранного режима. Есть ли способ заставить проигрыватель YouTube перейти в полноэкранный режим вместо того, чтобы просто сказать, что он содержит iframe?


person Marquizzo    schedule 03.09.2014    source источник
comment
удалить кнопку управления может быть решением.   -  person mpgn    schedule 03.09.2014
comment
Я бы хотел, но единственный вариант — controls: 0, и он удаляет громкость, воспроизведение/паузу и полосу поиска. Я бы не хотел оставлять пользователя без доступа ко всем этим элементам.   -  person Marquizzo    schedule 03.09.2014
comment
вы можете сделать свою пользовательскую кнопку воспроизведения/паузы/громкости   -  person mpgn    schedule 03.09.2014


Ответы (1)


Поскольку проигрыватель YouTube фактически существует внутри iFrame, при использовании полноэкранного API javascript вы полностью просматриваете iframe, а не проигрыватель. Так что, насколько это касается, это не полный экран. Единственный способ заставить проигрыватель перейти в полноэкранный режим — это нажать кнопку вручную (это устаревшее требование, поскольку iframe все еще может содержать проигрыватель Flash, а Flash имеет меры безопасности для предотвращения программного полноэкранного режима). На данный момент единственным решением является настраиваемая панель управления (и даже в этом случае вы не будете полностью отображать плеер, а только его контейнер... но, по крайней мере, у вас будет контроль над тем, что делают кнопки).

person jlmcdonald    schedule 04.09.2014
comment
Да, это разочарование, что проигрыватель YouTube не знает, что он в полноэкранном режиме. YouTube должен включить полноэкранный режим через свой API, если он близок к пользовательскому клику. Я имею в виду, что если безопасность является проблемой, полноэкранный режим iFrame без элементов управления видео имеет точно такие же последствия. - person Marquizzo; 04.09.2014
comment
Как я уже упоминал, если бы YouTube мог отказаться от устаревшего проигрывателя Flash, это не было бы проблемой, и они могли бы предоставить полноэкранный контроль для javascript; но потому что на рабочем столе всегда есть шанс, что в iFrame будет проигрыватель Flash, а у самого Flash есть проблемы с безопасностью, связанные с полноэкранным режимом (по сути, браузер не может программно передать экран плагину, если он не знает, что пользователь инициировал его), это то, с чем мы должны иметь дело. API-интерфейсы проигрывателя YouTube для Android и iOS, которые не поддерживают флэш-память, имеют методы для установки проигрывателя в полноэкранный режим. - person jlmcdonald; 04.09.2014
comment
Браузер не может программно передать экран плагину, если он не знает, что пользователь инициировал его с помощью HTML, он должен исходить от пользовательской инициации (кнопки). И, кстати, Flash может полностью взаимодействовать с javascript. (не то чтобы это имело значение в наши дни, когда флеш обречен) - person Jakob Sternberg; 10.03.2017
comment
Нет, HTML5 может инициировать полноэкранный режим при определенных обстоятельствах с помощью полноэкранного API (разработчика. mozilla.org/en-US/docs/Web/API/Fullscreen_API). Существуют ограничения, но у него гораздо больше гибкости в отношении того, когда он может работать, не требуя взаимодействия с пользователем. - person jlmcdonald; 14.03.2017