在iframe中实现全屏播放视频并解决跨域问题需要考虑以下几个关键点:
// 获取iframe元素
const iframe = document.getElementById('video-iframe');
// 全屏函数
function requestFullscreen(element) {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullscreen) { /* Safari */
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) { /* IE11 */
element.msRequestFullscreen();
}
}
// 调用全屏
requestFullscreen(iframe);
父页面代码:
// 监听来自iframe的消息
window.addEventListener('message', (event) => {
// 验证消息来源
if (event.origin !== 'https://video-website.com') return;
if (event.data === 'requestFullscreen') {
const iframe = document.getElementById('video-iframe');
requestFullscreen(iframe);
}
});
iframe内代码:
// 向父页面发送全屏请求
window.parent.postMessage('requestFullscreen', 'https://your-website.com');
<iframe
src="https://video-website.com/embed/..."
allowfullscreen
allow="autoplay; fullscreen"
frameborder="0">
</iframe>
<iframe
id="ytplayer"
type="text/html"
width="640"
height="360"
src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1"
frameborder="0"
allowfullscreen
allow="autoplay; fullscreen">
</iframe>
<script>
// 使用YouTube API控制全屏
function onYouTubeIframeAPIReady() {
const player = new YT.Player('ytplayer', {
events: {
'onReady': onPlayerReady
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
// 进入全屏模式
const iframe = document.getElementById('ytplayer');
requestFullscreen(iframe);
}
</script>
<iframe
src="https://player.vimeo.com/video/123456789"
width="640"
height="360"
frameborder="0"
allow="autoplay; fullscreen"
allowfullscreen>
</iframe>
<script>
// 使用Vimeo API
const iframe = document.querySelector('iframe');
const player = new Vimeo.Player(iframe);
player.on('play', function() {
// 全屏处理
iframe.requestFullscreen();
});
</script>
document.addEventListener('fullscreenchange', exitHandler);
document.addEventListener('webkitfullscreenchange', exitHandler);
document.addEventListener('mozfullscreenchange', exitHandler);
document.addEventListener('MSFullscreenChange', exitHandler);
function exitHandler() {
if (!document.fullscreenElement && !document.webkitIsFullScreen &&
!document.mozFullScreen && !document.msFullscreenElement) {
console.log('已退出全屏模式');
}
}
通过以上方法,您可以在遵守浏览器安全策略的前提下,实现在iframe中控制视频全屏播放的功能。