diff --git a/views/index.ejs b/views/index.ejs index 2ea0ea8..7eb1760 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -665,14 +665,36 @@ 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) => { e.stopPropagation(); - if (!document.fullscreenElement) { - (playerFrame.requestFullscreen || playerFrame.webkitRequestFullscreen).call(playerFrame); - } else { - (document.exitFullscreen || document.webkitExitFullscreen).call(document); - } + if (isFullscreen()) exitFullscreen(); + else enterFullscreen(); }); video.addEventListener('click', () => { video.muted = !video.muted; video.volume = 1.0; updateAudio(); }); video.addEventListener('dblclick', (e) => { e.preventDefault(); btnFs.click(); });