在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();
}
}
// 触发全屏
document.getElementById('fullscreen-btn').addEventListener('click', () => {
requestFullscreen(iframe);
});
父页面代码:
window.addEventListener('message', (event) => {
// 验证消息来源
if (event.origin !== 'https://video-site.com') return;
if (event.data === 'requestFullscreen') {
const iframe = document.getElementById('video-iframe');
requestFullscreen(iframe);
}
});
iframe内代码(需要视频网站支持):
document.getElementById('fullscreen-btn').addEventListener('click', () => {
window.parent.postMessage('requestFullscreen', 'https://your-site.com');
});
// YouTube iframe API
const player = new YT.Player('player', {
height: '360',
width: '640',
videoId: 'VIDEO_ID',
events: {
'onReady': onPlayerReady
}
});
function onPlayerReady(event) {
document.getElementById('fullscreen-btn').addEventListener('click', () => {
player.playVideo(); // 先播放
event.target.getIframe().requestFullscreen();
});
}
const player = new Vimeo.Player('vimeo-player');
document.getElementById('fullscreen-btn').addEventListener('click', () => {
player.requestFullscreen();
});
<div id="fullscreen-container" style="display: none;">
<iframe id="fullscreen-iframe" src="about:blank"></iframe>
</div>
<script>
function openFullscreen(url) {
const container = document.getElementById('fullscreen-container');
const iframe = document.getElementById('fullscreen-iframe');
iframe.src = url;
container.style.display = 'block';
requestFullscreen(container);
// 退出全屏时隐藏容器
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement) {
container.style.display = 'none';
iframe.src = 'about:blank';
}
});
}
</script>
希望这些方案能帮助你实现iframe中的全屏播放器功能。根据你的具体需求和视频平台,可能需要调整实现细节。