前言

也许很多前端遇到过这个需求:消息提醒。
一般来说,可以简单的实现绝不会用复杂的方式,audio标签提供了这个功能。
但是,新版的chrome浏览器禁止了js自动播放音频的功能,见鬼了。

音频播放

<audio src="../audio.mp3" id="myaudio" class="hide"></audio>
<script>
var audio = document.getElementById('myaudio');
audio.play();
</script>

这是最简单的音频播放脚本,但是在chrome下,抛出异常:Uncaught (in promise) DOMException,原因是这种操作必须由用户发起。当然,这不是特例,像F11全屏操作,浏览器也是禁止脚本操作的。
但是我们有这个需求,怎么破?

绝不屈服的脑洞

能否不操作play呢?
chrome不仅禁止了脚本自动调用play,还禁止了audio的autoplay属性。
但是,如果音频是静音状态,autoplay属性还是可以生效的。意思是,你可以播放,但是不能干扰用户的视听。
这就给我们提供了一个hack的方法:
默认开启音频的静音播放,而且是循环播放,当我们需要提醒用户的时候,把声音打开,播放时间设置为0秒,播放完毕,关掉声音,继续循环。
是的,音频一直在播放,但是用户听不见。只有我们想让用户听见的时候才能听见,客观上也能实现需求。

具体实现

<audio src="../audio.mp3" muted autoplay loop id="myaudio" style="display: none"></audio>
<script>
/*
* muted 静音
* autoplay 自动播放
* loop 循环播放
*/
var audio = document.getElementById('myaudio');
var t1 = 3e3;//如果是轮询,这个时间必须大于音频的长度。如果是webscoket,应该设置一个状态play,避免重复播放,如下:
var t2 = 2500;//音频的长度,确保能够完整的播放给用户
var play = false;
funcrion run(){if(play){return false;}audio.currentTime = 0;//设置播放的音频的起始时间audio.volume = 0.5;//设置音频的声音大小audio.muted = false;//关闭静音状态play = true;setTimeout(function(){play = false;audio.muted = true;//播放完毕,开启静音状态},t2);
}
setInterval(function(){run();//假装在轮询服务器,或者从websocket拉取数据
},t1);
</script>

结语

这个方法经过在chrome上的实测,可以使用。
但是其他浏览器未做测试,据说有的浏览器,似乎是IE不支持muted属性,限于操作系统,没做测试,如果在IE运行有问题,可以给我提个醒。

chrome浏览器下audio自动播放的hack相关推荐

  1. 谷歌浏览器音频自动播放HTML,修改系统设置让 Chrome 浏览器支持音频自动播放

    Android Chrome 浏览器默认禁止音频自动播放,但可以通过修改系统配置参数允许这个功能. 在 Android Chrome 60.X 版本之前,chrome://flags 中有一个 dis ...

  2. chrome浏览器session问题_Chrome浏览器的音频自动播放问题

    今天做一个网页播放音频的测试,需要自动播放背景音乐,代码如下: Your browser does not support the audio element. 可是我无论怎么设置,打开后界面都无法正 ...

  3. 解决新版Chrome拦截自动播放(Google浏览器不支持audio自动播放问题)

    Google浏览器不支持audio自动播放 声音无法自动播放这个在IOS/Android上面一直是个惯例,桌面版的Safari在2017年的11版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在20 ...

  4. 苹果微信html音乐播放,HTML5教程 在iOS微信浏览器中如何自动播放HTML5 audio

    本篇教程探讨了HTML5教程 在iOS微信浏览器中如何自动播放HTML5 audio,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < html> Aut ...

  5. Vue中使用can-autoplay插件实现浏览器不支持自动播放音频时提示点击

    场景 Vue中使用speak-tts插件实现点击按钮后进行语音播报(TTS/文字转语音): Vue中使用speak-tts插件实现点击按钮后进行语音播报(TTS/文字转语音)_BADAO_LIUMAN ...

  6. 【转】禁用Chrome和Firefox中自动播放的动画GIF

    动画GIF已经腐臭,并且在浏览时自动播放时可能会非常烦人.以下是如何阻止他们在Chrome和Firefox中自动播放. 禁用动画GIF Firefox 在地址栏中输入:  about:config,然 ...

  7. html 添加audio 无法自动播放,移动端不支持audio自动播放解决方案

    在开发webapp时,有时候你可能要加点背景音乐,这时我们会用到HTML5音频Audio. 你可能会这样写: 您的浏览器不支持音频播放. 做完后我们放PC端测试可以完美的进行自动播放(当然,是在你浏览 ...

  8. html5 video微信浏览器视频不能自动播放

    2019独角兽企业重金招聘Python工程师标准>>> html5 video微信浏览器视频不能自动播放 一.微信浏览器(x5内核): 1.不能自动播放 2.全屏 3.最顶层(z层的 ...

  9. Chrome浏览器密码框自动填充的bug

    在系统开发过程中,有一个难啃的bug从入职以来都在debug,一直以为是下拉框控件导致的问题.所以这个问题一直就搁浅了.今儿bug重提,就一步步找原因,排除了下拉控件select2的原因,才发现是在C ...

最新文章

  1. Metasploit-MS17-010利用
  2. 从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
  3. HTML5 的知识分享(二):HTML5 的常用标签
  4. python对象引用计数器_在Python中借助计数器对象对项目进行计数
  5. python数据库连接池_Python实现数据库连接池
  6. 的向上取整函数_计算机二级Excel常用函数解析
  7. java开发中jdbc连接数据 库的操作代码
  8. JavaScript的三大高阶函数
  9. centos7 mysql5.6.34_CentOS7.0环境下MySQL5.6.34安装教程
  10. JavaScript/jQuery 表单美化插件小结
  11. linux系统官方版下载 百度云,百度网盘linux版
  12. unicode字符集和utf-8编码
  13. 论文笔记:Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing
  14. 学了这么久的编程,编程语言创始人你知道几个?
  15. 一篇文章带你认识【集线器、网桥、交换机、路由器、网关】
  16. css实现气泡框小尾巴
  17. 基于STM32F407的FSMC功能实现对TFT的控制
  18. oracle 11g安装包下载地址合集
  19. 惠普HP dc7900的BIOS如何开启虚拟化VT设置
  20. ClickHouse基于全局字典与物化视图的精确去重方案

热门文章

  1. 项目管理工具 web_14个用于改善项目的Web工具
  2. AngularJS JetBrains WebStorm简介
  3. [已解决] org.hibernate.HibernateException:未配置CurrentSessionContext
  4. Java数组– java.util.Arrays
  5. 算法面试避坑指南,助你轻松应对Java面试
  6. angular NG-ZORRO 跑马灯左右控件
  7. VMware、vSphere 6.0 介绍
  8. IOS 地理编码以及反地理编码
  9. Ubuntu中octopress安装
  10. Linux手动导入导出mysql数据库