使用iOS Safari Web浏览器的全屏html5视频

Fab*_*bii 4 javascript fullscreen mobile-safari html5-fullscreen

有没有一种方法可以在iOS Safari(移动网络)上触发全屏。全屏或全视口都很棒。这是我在下面尝试过的:

<video id="mobile_content"> 
  <source src="someurltocontent"></source>
</video>


function makefullscreen(element){
    if(element.requestFullscreen) {
        element.requestFullscreen();
    } 
    else if(element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
    } 
    else if(element.webkitRequestFullscreen) {
        element.webkitRequestFullscreen();
    } 
    else if(element.msRequestFullscreen) {
        element.msRequestFullscreen();
    }
    else{
        var requestFullscreen = 
                document.documentElement.requestFullscreen ||
                document.documentElement.webkitRequestFullscreen ||
                document.documentElement.mozRequestFullscreen ||
                document.documentElement.requestFullScreen ||
                document.documentElement.webkitRequestFullScreen ||
                    document.documentElement.mozRequestFullScreen;

        if (requestFullscreen) {
           requestFullscreen.call(document.documentElement);
        } 
        else {
           console.log("really!? come on...");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据用户操作,上述功能会传递一个视频元素,如果可以使用全屏,则在视频元素上执行全屏。

这不适用于Safari for IPAD。


一种解决方法是将控件attr应用于视频标签,然后让用户使用本机播放器全屏启动全屏。

<video id="mobile_content" controls> 
     <source src="someurltocontent"></source>
</video>
Run Code Online (Sandbox Code Playgroud)

除上述内容外,还有其他想法吗?

小智 5

您可以使用以下代码在iPad上的Safari上轻松触发Media DOM元素(如video上的全屏显示:

的HTML

<div id="video-container">
    <video> 
        <source src="path/to/file.webm"></source>
        <source src="path/to/file.mp4"></source>
    </video>
</div>
Run Code Online (Sandbox Code Playgroud)

的JavaScript

var videoContainer = document.getElementById('video-container');
var video          = videoContainer.getElementsByTagName('video');

function toggleVideoFullscreen() {

    if (video.webkitEnterFullScreen) {
        // Toggle fullscreen in Safari for iPad
        video.webkitEnterFullScreen();
    } else {
        // Toggle fullscreen for other OS / Devices / Browsers 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此方法仅适用于iPad的Safari中的Media DOM Elem,并且我总是在要求对另一个DOM Elem(例如divsection等)进行全屏显示时遇到麻烦。

似乎webkitRequestFullscreen总是undefined在iPad上的Safari中的每个DOM Elem上都返回。

祝你今天愉快 !


Car*_*ori 5

嘿,对于每个感兴趣的人,我花了几天时间研究处理全屏视频的最佳方法,同时考虑到交叉浏览兼容性。

有3种方法:

1- 就像 Netflix 一样,您不是播放视频,而是将用户重定向到应用商店。

2-您可以使用“playsinline”属性“模拟”全屏,这将避免触发移动 IOS 中的本机控件,并且宽度为 100% 时,视频看起来像是全屏的。

3-第三种方法类似于已接受的答案,但包括检测全屏被触发和管理退出全屏的方法。

基本上,您将围绕视频制作一个包装器,我通过 useRef() (反应)获取引用,并且您将在包装器中触发全屏 api(如果可能)。

但在最后一种情况下,最后的 else(不支持 IOS Mobile)您将触发另一个方法。

好的,这是代码!

const video = document.getElementsByTagName('video')[0];
const isInFullScreen =
    (document.fullscreenElement && document.fullscreenElement !== null) ||
    (document.webkitFullscreenElement && document.webkitFullscreenElement !== null) ||
    (document.mozFullScreenElement && document.mozFullScreenElement !== null) ||
    (document.msFullscreenElement && document.msFullscreenElement !== null);
  if (!isInFullScreen) {
    if (playerWrapper.current.requestFullScreen) {
      // W3C API
      playerWrapper.current.requestFullScreen();
    } else if (playerWrapper.current.mozRequestFullScreen) {
      // Mozilla current API
      playerWrapper.current.mozRequestFullScreen();
    } else if (playerWrapper.current.webkitRequestFullScreen) {
      // Webkit current API
      playerWrapper.current.webkitRequestFullScreen();
    } else if (video.webkitEnterFullScreen) {
      // This is the IOS Mobile edge case
      video.webkitEnterFullScreen();
    }
  } else {
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.webkitExitFullscreen) {
      document.webkitExitFullscreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
  }
Run Code Online (Sandbox Code Playgroud)