【问题标题】:How to determine if user interacted with document to start video?如何确定用户是否与文档交互以开始视频?
【发布时间】:2019-04-16 06:20:06
【问题描述】:

尝试在 Chrome 中自动播放视频时遇到错误,提示:DOMException: play() failed because the user didn't interact with the document first.

对于“普通”页面有一个解决方案:

var promise = document.querySelector('video').play();
if (promise !== undefined) {
  promise.then(_ => {
    // Autoplay started!
  }).catch(error => {
    // Autoplay was prevented.
    // Show a "Play" button so that user can start playback.
  });
}

但我使用 Phaser 框架 Video 对象播放视频,该对象不返回承诺,因此我需要确定用户是否与尝试播放视频的页面 before 进行了交互。有什么解决办法吗?

【问题讨论】:

  • 你试过在页面加载时设置播放吗?
  • @andrea-f 页面可以加载到其他选项卡中,这样用户即使在加载时也不会与之交互
  • 也许现在可以处理选项卡更改和调度事件?
  • @DmitrySamoylov 我认为它至少需要关注。除非您可以在页面上模拟会触发自动播放的用户操作,例如发送点击事件。
  • 这肯定是因为您的视频有声音,由于新政策,Chrome 会阻止自动播放有声音的视频:developers.google.com/web/updates/2017/09/…

标签: javascript html5-video phaser-framework


【解决方案1】:

寻找用户与窗口的交互

var interacted = false;
function fun(){
   interacted = true;
   $(window).unbind("scroll");
   $(window).unbind("click");
   play();
}
$(window).bind("scroll click", fun);
function play(){
     if(interacted){
        //play audio or video
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多