浏览器拒绝 JavaScript 的 play() 操作。

10 浏览
0 Comments

浏览器拒绝 JavaScript 的 play() 操作。

我有一个页面,其中有一个输入字段用于扫描产品。当扫描条形码或在字段中输入SKU时,会进行一个ajax请求,并根据响应使用HTMLMediaElement.play()播放应用程序的成功或错误声音。

sounds.error.play();

这个功能之前一直正常工作,但现在我得到了以下错误:

只有在用户批准、用户激活网站或媒体静音时才允许自动播放。

接着是:

NotAllowedError:由于用户拒绝权限,用户代理或当前环境在当前上下文中不允许播放方法。

由于这个页面只是为了扫描SKU而存在,所以在页面加载时,该输入字段会被编程地聚焦,以便更方便地使用。我尝试取消这个焦点,以便用户必须点击输入字段,但似乎这并不能满足播放音频的要求。

经过进一步尝试,我发现在有一定额外用户交互的情况下,声音会播放。例如,如果我创建一个复选框来“启用”声音,并且用户点击它,那似乎就足够了。或者,如果用户点击输入元素之外的位置,然后再次点击它,也可以工作。

到底有什么要求可以满足大多数现代浏览器允许播放音频的要求呢?

我意识到不同的浏览器和配置可能会有不同的答案,但我无法找到任何权威的关于当前版本Firefox或Chrome的信息。我正在寻找一种解决方法,以便应用程序不需要复杂的额外点击或其他类型的交互,并且由于我现在意识到这个新政策,所以希望修改尽可能不引人注目。

更新:

这里有一个我制作的基本示例来演示这个问题。我刚刚尝试了三种不同的浏览器,它们的行为都有些不同。特别是Firefox的行为与上述描述相符-直到我聚焦在输入字段上,失焦,然后再次点击以聚焦才播放声音:

http://so.dev.zuma-design.com/input-sounds.html

0