Chrome浏览器报错:Uncaught (in promise) DOMException
audio标签播放失败问题
小白我近期做了一个根据 websocket 长连接告警消息实时推送的需求:此处需要弹窗也需要铃声提醒用户, 重点是js直接调用 audio
的 .play()
; 方法 F12
查看提示: Uncaught (in promise) DOMException
, -这播放时心情好的时候给你响一下,经常不得劲,直接报错不响了-,这报错扔度娘还是挺多解决办法的,但是好多不是不奏效,就是达不到自己使用的效果下面上代码
。
当前方式是将触发播放次数增加来达到提示音播放的效果,loop
设置为 true
为无限循环播放 muted
设置为 true
是将播放器处于静音状态,相当于定时器成功开启播放提示音后,一直处于循环播放的状态,只是被设置为静音用户听不到,再暗处循环播放,只要在某个函数内将 muted
静音属性取消,扬声器即可响起你想要播放的提示音 – 完美的达到了 要它响的时候就响 – 不响的时候就不让他响
还有就是修改浏览器设置的方法,但是咱能用代码解决的问题就坚决不用手动去搞!这么多用户一个个的让他们去设置,这不但麻烦咱java攻城狮还得被质疑行还是不行【捂脸】
查了很多播放方式根据自己需求整理了一个Chrome上可行的,铃声播放方式有点麻烦实际解决了我的问题。
<!-- 播放标签 -->
<audio id="chatAudio" controls="controls" hidden="true" loop="true">
<source src="<%=request.getContextPath()%>/001.WAV" type="audio/mpeg" />
</audio>
<script type="text/javascript">
var audio = null;
var interval = null;
function onanplaythrough() {
audio = document.getElementById("chatAudio");
//判读是否播放
if (audio.paused) {
audio.paused=false;
audio.muted = true;
//没有就播放
audio.play();
}else {
//播放成功后清除定时器的循环
clearInterval(interval);
}
}
//此处代码加载时自动循环调用,用户交互就能成功调用播放-
interval = setInterval("onanplaythrough()",1);
//开启提示音,将audio对象取消静音
function openAuio(){
audio.muted = false;
}
//关闭提示音,直接将播放器静音
function closeAudio(){
if (audio == null) {
audio = document.getElementById("chatAudio");
}
audio.muted = true;
// audio.pause();
}
</script>
浏览器启动后处于正常状态
**此处可以看到-当websocket收到消息的时候 将 audio
对象取消静音,浏览器即可播放提示音 **
下面附上提示音下载地址: https://pan.baidu.com/s/1X9rgZQQTowyL3pSMw9IkmA
提取码:s4tg