Chrome 66 禁止声音自动播放
声音无法自动播放一直在IOS/Android上面都是一个惯例, 桌面端的 Safari在2017年的11版本中也宣布禁止带有声音的多媒体自动播放, 紧接着2018年4月份Chrome发布的66版本也正式关闭了声音自动播放, 也就是 <audio autoplay></audio> <video autoplay></video>在桌面版的浏览器也将失效.
一开始移动端是完全禁止带有音频的媒体自动播放, 是因为考虑到了手机带宽和对电池的消耗, 但是后来又改了, 因为浏览器厂商发现网页开发人员可能会使用GIF动态图替代视频实现自动播放, 正如IOS文档所说, 使用GIF的带宽流是video(h24)格式的12倍, 而播放性能消耗是2倍, 所以这样对用户反而不利, 还有开发者使用Canvas进行hack, 如Android Chrome文档中提到.
因此浏览器厂商开放了对多媒体自动播放的限制, 只要具备以下条件就能自动播放:
1. 没有音频轨道, 或者设置了muted属性
2. 在视图里面是可见的, 要插入到DOM里面并且不是display: none; 或者 visibility: hidden的, 没有滑出可视区域.
也就是说只要你不开声音扰民, 且对用户可见, 就可以自动播放.
桌面版的Safari浏览器也使用了这个策略, 升级到 Safari 11 之后的说明:

这个策略对视频网站的冲击非常大, 比如用Safari打开tudou

Chrome 的禁止更加人性化一点, 他有一个MEI的策略, 这个策略大概就是说只要用户在当前网页主动播放超过7s的媒体, 视频窗口不能小于 200 X 140, 就允许自动播放
对于网页开发者来说应该如何规避这个风险?
Chrome文档给了一个最佳实践, 先把音频加一个muted的属性就可以自动播放, 然后显示一个声音被关掉的按钮, 提示用户点一下打开声音, 对于视频来说, 确实可以这样处理, 但是对于音频来说, 很多人是监听页面的点击事件, 只要点一次就可以开始播放, 一般都是播放背景音乐, 也不需要按钮,但是如果有多个音频资源的页面应该如何自动播放呢?
首先, 如果用户还没有进行交互就调用播放声音的API, Chrome会给个提示

Safari会这么提示
NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
意思就是说, 用户还没有进行交互, 不能调用play(), 那么用户的交互包括哪些呢?
包括用户触发的 touchend, click, doubleclick或者是deydown, 在这些事件里面可以调用play()
所以上面提到的很多人是监听的整个页面的点击事件进行播放的, 不管点击哪里, 只要点了就行, 包括触摸下滑
原生播放视频只能使用 video 标签, 而原生音频播放除了使用 audio标签外, 还可以使用一个API叫做 AudioContext, 它是一个能够用来控制声音播放并且带了很多丰富的操作接口.
参考链接
利用HTML5 Web Audio API给网页JS交互增加声音
Chrome 66 禁止声音自动播放的更多相关文章
- Chrome 声音自动播放抱错问题【play() failed】
Chrome下调用play后抱错:DOMException: play() failed because the user didn't interact with the document firs ...
- video实现有声音自动播放
video实现自动播放有声音 需求:老板见人家可以的,我们的也要可以!!! 前端:自动播放,简单... 要实现:鼠标移入视频播放同时有声音,移出让你暂停,,,,, 问题集合 1- 自动播放实现没有声音 ...
- 怎样解决Chrome浏览器因为禁止音频自动播放所造成的视频无法自动播放且报错: Uncaught (in promise) DOMException的问题
这个问题是谷歌基于用户体验方面的考虑, 对页面加载时自动播放的音频作了限制, 试想一下, 如果你打开某个页面就立刻自动播放某种不可描述的声音, 那体验想必是十分酸爽. 尽管这个设定是针对音频的, 但实 ...
- Windows下如何禁止优盘自动播放、自动运行
造冰箱的大熊猫@cnblogs 2019/1/28 为了防范层出不穷的病毒和木马,如何禁止插入优盘后Windows自动播放优盘或运行优盘程序? 运行环境:Windows 7 1)点击Windows开 ...
- [bug]解决chrome浏览器不支持所有媒体音乐不自动播放问题
声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...
- 【转】解决chrome浏览器不支持audio和video标签的autoplay自动播放
声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...
- Chrome,firefox解除阻止视频自动播放
Firefox 66 将阻止自动播放音频和视频 PingWest品玩2月5日报道,从发布适用于桌面的 Firefox 66 和 Firefox for Android 开始,Firefox 将默认阻止 ...
- 阿里云 Aliplayer高级功能介绍(九):自动播放体验
基本介绍 经常会碰到客户询问,为什么我设置了autoplay为true,但是没有自动播放,每次都要向客户解释这个是浏览器从用户体验角度考虑做的限制,客户会继续询问那我要怎么做? 针对这个问题Alipl ...
- 如何自动播放光盘、解决win7电脑不能播放光盘
如何设置光盘自动播放.允许光盘自动运行呢? 在使用电脑光驱播放光盘文件的时候,经常出现的一个问题是,光驱不能自动播放光盘,但是打开光盘的文件手动操作没有任何问题,这给使用造成了很多麻烦.那么,如何让光 ...
随机推荐
- how to istall virtualbox on centos
https://tecadmin.net/install-oracle-virtualbox-on-centos-redhat-and-fedora/
- Word2Vec实现原理(Hierarchical Softmax)
由于word2vec有两种改进方法,一种是基于Hierarchical Softmax的,另一种是基于Negative Sampling的.本文关注于基于Hierarchical Softmax的改进 ...
- shell开源跳板机sshstack
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 源码地址: https://github.com/sshstack/sshstack 为什么要写shell跳板机? ...
- 制作Wi-Fi Ducky远程HID攻击设备
1.介绍WIFI DUCKY 它是一个Wi-Fi控制的BadUSB设备来远程执行Ducky Scripts. 使用充当键盘的USB设备来注入攻击,Hak5 的 USB Rubber Ducky 是这种 ...
- SQL server类型转换
1. CAST函数 语法: CAST ( expression AS data_type [ ( length ) ] ) | | | |关键字 表达式或值 要转换成的数据类型 最大长度 示例: SE ...
- 2017第八届蓝桥杯C/C++ B组省赛-日期问题
标题:日期问题 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的 ...
- Android内核sys_setresuid() Patch提权(CVE-2012-6422)
让我们的Android ROOT,多一点套路. 一.简单套路 CVE-2012-6422的漏洞利用代码,展示了另一种提权方法.(见附录) 这也是一个mmap驱动接口校验导致映射任意内核地址的洞.将内核 ...
- Samsung_tiny4412(驱动笔记06)----list_head,proc file system,GPIO,ioremap
/**************************************************************************** * * list_head,proc fil ...
- sql数据查询基础笔记
使用SELETE语句进行查询 语法 SELECT<列名> FROM<表名> [ORDER BY <排序的列名>[ASC或DESC]] 1.查询所有的数据和列 SE ...
- 集合框架 ArrayList LinkedList(待续)
ArrayList中存储的元素的内存空间是连续的, LinkedList内存空间不是连续的 集合对象不能被序列化到硬盘中 http://blog.csdn.net/eson_15/article/de ...