Fix fullscreen on iOS Safari (webkitEnterFullscreen on video)

This commit is contained in:
Sebastjan 2026-04-25 08:41:18 +02:00
parent 43f59851b1
commit 0755c22d1f

View File

@ -665,14 +665,36 @@
updateAudio(); updateAudio();
}); });
// Fullscreen // Fullscreen — must handle iOS Safari separately (no fullscreen API on container,
// only on the video element via webkitEnterFullscreen)
function enterFullscreen() {
// iOS Safari path: only video.webkitEnterFullscreen works
if (typeof video.webkitEnterFullscreen === 'function' && !document.fullscreenEnabled) {
try { video.webkitEnterFullscreen(); return; } catch (e) {}
}
// Standard Fullscreen API on the video element (most reliable cross-browser)
if (video.requestFullscreen) { video.requestFullscreen().catch(() => {}); return; }
if (video.webkitRequestFullscreen) { video.webkitRequestFullscreen(); return; }
// Fallback: try the container
if (playerFrame.requestFullscreen) { playerFrame.requestFullscreen().catch(() => {}); return; }
if (playerFrame.webkitRequestFullscreen) { playerFrame.webkitRequestFullscreen(); return; }
// Last-resort iOS path
if (typeof video.webkitEnterFullscreen === 'function') {
try { video.webkitEnterFullscreen(); } catch (e) {}
}
}
function exitFullscreen() {
if (document.exitFullscreen) { document.exitFullscreen().catch(() => {}); return; }
if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); return; }
if (typeof video.webkitExitFullscreen === 'function') { try { video.webkitExitFullscreen(); } catch (e) {} }
}
function isFullscreen() {
return !!(document.fullscreenElement || document.webkitFullscreenElement || video.webkitDisplayingFullscreen);
}
btnFs.addEventListener('click', (e) => { btnFs.addEventListener('click', (e) => {
e.stopPropagation(); e.stopPropagation();
if (!document.fullscreenElement) { if (isFullscreen()) exitFullscreen();
(playerFrame.requestFullscreen || playerFrame.webkitRequestFullscreen).call(playerFrame); else enterFullscreen();
} else {
(document.exitFullscreen || document.webkitExitFullscreen).call(document);
}
}); });
video.addEventListener('click', () => { video.muted = !video.muted; video.volume = 1.0; updateAudio(); }); video.addEventListener('click', () => { video.muted = !video.muted; video.volume = 1.0; updateAudio(); });
video.addEventListener('dblclick', (e) => { e.preventDefault(); btnFs.click(); }); video.addEventListener('dblclick', (e) => { e.preventDefault(); btnFs.click(); });