2013-10-22 74 views
21

这个问题在现在连续几天的挣扎......禁用全屏iPhone视频

有什么办法或“黑客”,禁止在iPhone播放视频全屏Safari上。当然,我已经尝试过'webkit-playsinline'属性,但这只会在你自己的应用中起作用。

参见:

<video class="" poster="" webkit-playsinline> 
    <source src="" type="video/ogg" preload="auto"> 
    <source src="" type="video/mp4" preload="auto">     
</video> 

而且我试图把视频在画布上,但因为它看起来视频作为画布的drawImage源()方法目前不支持iOS。

有没有其他方法或替代技术可以使用?还是我最近几天真的浪费了我的时间?

+1

你见过http://stackoverflow.com/questions/3699552/html5-inline-video-on-iphone-vs-ipad-browser –

回答

16
<div id="video-player"> 
     <video src="http://movies.apple.com/media/us/html5/showcase/2011/demos/apple-html5-demo-tron-us_848x352.m4v"></video> 
     <p><a href="javascript:playPause();">Play/Pause</a></p> 
    </div> 

    <script type="text/javascript"> 
     // intercept and cancel requests for the context menu 
     var myVideo = document.querySelector('video'); 
     myVideo.addEventListener("contextmenu", function (e) { e.preventDefault(); e.stopPropagation(); }, false); 

     // hide the controls if they're visible 
     if (myVideo.hasAttribute("controls")) { 
      myVideo.removeAttribute("controls") 
     } 

     // play/pause functionality 
     function playPause() { 
      if (myVideo.paused) 
       myVideo.play(); 
      else 
       myVideo.pause(); 
     } 

     // essentially you'll have to build your own controls ui 
     // for position, audio, etc. 

    </script> 

的想法是:

  1. 防止用户获取到上下文菜单(以显示控制)
  2. 隐藏任何播放器控制,可能是可见

的缺点是你必须实现你自己的播放器用户界面 - 但它不是太复杂

* Th在代码只是为了告诉你如何解决问题,而不是用在实时应用

关于这个问题了些研究发现:

WebKit的playsinline表示影片元素应播放内嵌 而不是全屏播放。

相关标签“video”可用性Available in iOS 4.0及更高。 (仅在一个UIWebView与allowsInlineMediaPlayback 属性设置为YES启用source

恐怕只是不会使用视频播放器在Safari

他们有成为可能视频在帆布上的指南,但你可能知道它不支持在IOS中:video on canvas

本文档总结了目前IOS中移动媒体内容的限制:mobile video status

+0

这也导致了全屏播放。虽然我一定会看到它背后的想法。 –

+0

我在Windows Phone上注意到视频始终播放全屏 - 我在这件事上没有选择,它可能无法通过浏览器 - 为什么你需要这种行为? (可能有不同的方法) –

+0

网站内的某些元素必须在特定的时间码上触发。 –

14

在iOS系统10+

苹果最终使属性playsinline在所有浏览器在iOS上10,所以这将无缝地工作:

<video src="file.mp4" playsinline> 

在iOS 8和iOS 9中

您可以通过模拟播放sk来解决此问题imming视频,而不是实际上.play()'它。

总之,使用iphone-inline-video,它会照顾回放和音频同步(如果有的话),并保持<video>正常工作。

+2

对我来说,'

+0

@KeitIG感谢您的评论!我更新了我的答案。在将iOS 10拉出测试版之前,他们对该属性进行了前置处理。 –