首页 > 解决方案 > 是否有事件可以检测用户何时与页面交互?

问题描述

我正在尝试在用户与页面交互后立即自动播放视频。如果我之前播放视频,我显然会收到一个安全错误:

Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

这很公平,我发现了这个错误,现在想注册一个事件,以便在用户与页面交互后立即重试播放。

=> 有这样的活动吗?

我试图在 mouseover / mousemove / touchmove / click / focus / visibilitychanged 上注册事件,但它不是最佳的,经过一些测试后也不是很可靠......

标签: javascripthtmleventsvideoautoplay

解决方案


我知道这是一个老问题,但对于任何处理这个问题的人来说,play()都会返回一个承诺。因此,您可以执行类似于以下代码的操作。此代码将尝试play()每 5 秒触发一次该函数,直到成功为止,然后它将清除间隔。

不确定它是否也适用于视频,但我会这么认为。

const tryToPlay = setInterval(() => {
    const audio = new Audio(theAudioFile);

    audio.play()
        .then(() => {
            clearInterval(tryToPlay);
        })
        .catch(error => {
            console.info('User has not interacted with document yet.');
        });
}, 5000);

推荐阅读