全文不看版:webkitEnterFullScreen,和requestFullScreen一样返回一个promise,但是连文档都找不到,不建议使用。

    前两天调研完移动端视频行内播放,又接到了产品的这个需求,那么,能不能做呢?

    前情提要,在移动端行内播放视频缩水版:

    1. android 移动端默认直接行内播放,不会漂浮上去
    2. safari 加 playsinline 和 webkit-playsinline
    3. 微信在上面的基础上加 x5-video-player-type=”h5” x5-video-player-fullscreen=”portraint”
    4. app 内,能发版的让客户端改 webview 配置,
      1. webview.allowsInlineMediaPlayback = true
      2. webview.mediaPlaybackRequiresUserAction = false
    5. app内,不能发版的,视频又小的,iphone-inline-video
    6. app内,不能发版的,视频大的,jsmpeg,先把代码转成ts

    一番搜索之后,搜到了 Element.requestFullscreen 这个api,虽然兼容性看着不咋地,但是先试试再说
    image.png

    1. <button onclick="location.reload()">刷新页面</button>
    2. <button onclick="playVideo()">播放视频</button>
    3. <video muted type="video/mp4"
    4. src="https://mdn.github.io/learning-area/javascript/apis/video-audio/finished/video/sintel-short.mp4"
    5. webkit-playsinline="true" playsinline="true" x5-video-player-type="h5"
    6. x5-video-player-fullscreen="portraint"></video>
    7. <script>
    8. var video = document.querySelector('video');
    9. async function playVideo() {
    10. await video.requestFullscreen()
    11. video.play()
    12. }
    13. </script>

    测试结果:chrome可以,ios不行,android可以。
    那么问题就到了为什么 ios 不行上,直接打印这个 dom 上的所有带 f 的方法。

    1. <button onclick="location.reload()">刷新页面</button>
    2. <button onclick="playVideo()">播放视频</button>
    3. <video muted type="video/mp4"
    4. src="https://mdn.github.io/learning-area/javascript/apis/video-audio/finished/video/sintel-short.mp4"
    5. webkit-playsinline="true" playsinline="true" x5-video-player-type="h5"
    6. x5-video-player-fullscreen="portraint"></video>
    7. <script>
    8. var video = document.querySelector('video');
    9. async function playVideo() {
    10. const obj = {}
    11. for (const prop in video) {
    12. if (prop.match(/f|Full/)) {
    13. if (typeof video[prop] === 'function') {
    14. obj[prop] = video[prop]
    15. }
    16. }
    17. }
    18. console.log(obj) // 坑爹呀
    19. await video.requestFullscreen()
    20. video.play()
    21. }
    22. </script>
    1. console里可以找到一个很像的api,叫 **webkitEnterFullScreen ,**试了下确实可以做到全屏,并且通过同样的方式,我们发现chromeandroid里也有这个方法。是mdn里并没有这个enterFullScreenapi介绍,通过9年前发布的[[译]原生全屏JavaScript API](https://mrluo.life/article/detail/97/native-fullscreen-javascript-api ) 推断,这是ios早期就有,并且后面估计没有改过的api,风险极大。