javascript - 是否有事件可以检测用户何时与页面交互?
问题描述
我正在尝试在用户与页面交互后立即自动播放视频。如果我之前播放视频,我显然会收到一个安全错误:
Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.
这很公平,我发现了这个错误,现在想注册一个事件,以便在用户与页面交互后立即重试播放。
=> 有这样的活动吗?
我试图在 mouseover / mousemove / touchmove / click / focus / visibilitychanged 上注册事件,但它不是最佳的,经过一些测试后也不是很可靠......
解决方案
我知道这是一个老问题,但对于任何处理这个问题的人来说,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);
推荐阅读
- angular - 如何在单个项目中运行angular和angular js框架
- javascript - connect.bodyParser 不是函数
- python - 文件上传到 Python 中的 Google Cloud Storage 签名 URL
- wordpress - CF7 下拉菜单上的 OnChange 事件 [选择]
- mysql - 我们 DBA 对 MySQL 和 TiDB 的性能测试表明,独立的 TiDB 的性能不如 MySQL
- c# - 如何在 C# 中对 TextBox 进行约束?
- javascript - 如何将工具提示添加到锚点
- mysql - 我们应该在 MySQL 中动态创建的表中拆分数据还是与其他 DBMS 一起使用?
- c# - C#:在字符串列表中获取双重条目
- java - OncreateView 中出现意外的 NPE