如何检测iOS离开全屏视频?

Posted

技术标签:

【中文标题】如何检测iOS离开全屏视频?【英文标题】:How to detect iOS leaving fullscreen video? 【发布时间】:2015-11-20 13:48:50 【问题描述】:

如何检测 ios 上的视频何时关闭?我正在运行 videojs,它将 html5 视频作为本机视频播放器启动。为了正确反应,我想在原生播放器关闭时得到一个事件。

这里有几个与此类似的问题,但没有一个答案有效。

我尝试的第一个解决方案:

player.addEventListener('webkitendfullscreen', onVideoEndsFullScreen, false);

解决方案于 2012 年在此处提出:How to figure out when a HTML5 video player enters the full screen mode on iOS / iPads?

这个方法对我不起作用。该事件没有被触发(至少在 iOS 模拟器中),我对此无能为力。

我尝试的第二个解决方案

// Do on resize
if(video.webkitDisplayingFullscreen == false)
    // Exit was triggered    

早于 2012 年就提出了解决方案:Is there an "onClose" event for the fullscreen video player on iPhone?

这个方法也不行,video元素没有这个属性(至少在iOS模拟器中)。顺便说一句,此方法已弃用。

现在有没有人知道如何在 iOS 离开全屏时收到通知?

【问题讨论】:

【参考方案1】:

您现在可能已经找到了解决方案,但我在 iPad 和 iPhone 上遇到了同样的问题。我发现fullscreenchange 事件在这些设备上都没有触发,尽管它在其他地方运行良好。

我在 http://html5wood.com/html5-video-fullscreen-change-events-on-ipad/ 找到了我的解决方案,但为了完整起见,我也会在这里解释一下:

除了用于 fullscreenchange 的各种其他事件侦听器之外,我还添加了

var video = document.getElementById(myVideo);

video.addEventListener("webkitendfullscreen", function()
    videoExitedFullscreen(video);
, false);

(请注意,事件侦听器是在视频本身上调用的,而不是像其他事件侦听器那样在文档上调用)

在其中,我正在调用另一个函数来测试视频当前是否为全屏,并进行相应的更改 - 我将其创建为一个函数,因此我可以轻松地从所需的多个事件侦听器中的每一个中调用它各种浏览器 (如果您不确定这些是什么,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#Prefixing)

//function to be run when full screen is closed
function videoExitedFullscreen(videoElement)

    //check if an element is currently full screen
    if(document.fullScreenElement || document.webkitIsFullScreen == true || document.mozFullScreen || document.msFullscreenElement )

        //do whatever here if the video is now (just became) full screen

     else 
        console.log('fullscreen was closed');

        //do whatever you want on fullscreen close, like pause or mute
    

【讨论】:

自 01/2019 和 iOS12 起,webkitfullscreenchange 将在进入或退出全屏模式时触发:fullscreenchange 不会。答案中详述的检测方法仍然有效。 自 2020 年 6 月 11 日 iOS 13.1 起,webkitfullscreenchange 不会在文档或视频元素上触发。上面的答案是唯一有效的!我不敢相信这个答案在 4 年后仍然有效,Apple 仍然没有修复它。【参考方案2】:

监听fulscreenchange 事件并检查isFullscreen()

<link href="http://vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/4.12/video.js"></script>

<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto"  >
  <source src="http://vjs.zencdn.net/v/oceans.mp4" type='video/mp4'>
  <source src="http://vjs.zencdn.net/v/oceans.webm" type='video/webm'>
</video>

<script>
  videojs('my_video_1').ready(function()
    var player = this;
    player.on('fullscreenchange', function()
      if(!player.isFullscreen()) 
        alert('Exited fullscreen');
      
    );
  );
</script>

【讨论】:

遗憾的是,这也适用于非本地玩家。所以真的没有区别。此外,本地玩家可能不会触发fullscreentrigger - 但我明天会尝试。

以上是关于如何检测iOS离开全屏视频?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过强制关闭应用程序检测同伴是不是离开视频通话

检测 webview 视频何时在 ios8 上变为全屏

检测以纵向或横向全屏播放的视频

如何制作适用于 IOS 和桌面浏览器的自定义全屏视频按钮?

如何防止我的 Phonegap 应用在 ios 上全屏播放视频?

iOS:在 MPMoviePlayerController 中将设备方向更改为横向时如何全屏播放视频?