Chrome 聲音自動(dòng)播放抱錯(cuò)問(wèn)題【play() failed】

Chrome下調(diào)用play后抱錯(cuò):DOMException: play() failed because the user didn't interact with the document first.

聲音無(wú)法自動(dòng)播放這個(gè)在IOS/Android上面一直是個(gè)慣例,桌面版的Safari在2017年的11版本也宣布禁掉帶有聲音的多媒體自動(dòng)播放功能,緊接著在2018年4月份發(fā)布的Chrome 66也正式關(guān)掉了聲音自動(dòng)播放,也就是說(shuō)

<audio autopaly></audio> <video autoplay></video>

在桌面版瀏覽器也將失效或悲。

最開(kāi)始移動(dòng)端瀏覽器是完全禁止音視頻自動(dòng)播放的,考慮到了手機(jī)的帶寬以及對(duì)電池的消耗郑象。但是后來(lái)又改了册烈,因?yàn)闉g覽器廠商發(fā)現(xiàn)網(wǎng)頁(yè)開(kāi)發(fā)人員可能會(huì)使用GIF動(dòng)態(tài)圖代替視頻實(shí)現(xiàn)自動(dòng)播放弥姻,正如IOS文檔所說(shuō)强经,使用GIF的帶寬流量是Video(h264)格式的12倍宵呛,而播放性能消耗是2倍,所以這樣對(duì)用戶反而是不利的夕凝。又或者是使用Canvas進(jìn)行hack宝穗,如Android Chrome文檔提到。因此瀏覽器廠商放開(kāi)了對(duì)多媒體自動(dòng)播放的限制码秉,只要具備以下條件就能自動(dòng)播放:

(1)沒(méi)音頻軌道逮矛,或者設(shè)置了muted屬性

(2)在視圖里面是可見(jiàn)的,要插入到DOM里面并且不是display: none或者visibility: hidden的转砖,沒(méi)有滑出可視區(qū)域须鼎。

換句話說(shuō),只要你不開(kāi)聲音擾民府蔗,且對(duì)用戶可見(jiàn)晋控,就讓你自動(dòng)播放,不需要你去使用GIF的方法進(jìn)行hack.桌面版的瀏覽器在近期也使用了這個(gè)策略

對(duì)于網(wǎng)頁(yè)開(kāi)發(fā)人員來(lái)說(shuō)姓赤,應(yīng)當(dāng)如何有效地規(guī)避這個(gè)風(fēng)險(xiǎn)呢赡译?

Chrome的文檔給了一個(gè)最佳實(shí)踐:先把音視頻加一個(gè)muted的屬性就可以自動(dòng)播放,然后再顯示一個(gè)聲音被關(guān)掉的按鈕不铆,提示用戶點(diǎn)一下打開(kāi)聲音蝌焚。對(duì)于視頻來(lái)說(shuō),確實(shí)可以這樣處理誓斥,而對(duì)于音頻來(lái)說(shuō)只洒,很多人是監(jiān)聽(tīng)頁(yè)面點(diǎn)擊事件,只要點(diǎn)一次了就開(kāi)始播放聲音劳坑,一般就是播放個(gè)背景音樂(lè)毕谴。但是如果對(duì)于有多個(gè)聲音資源的頁(yè)面來(lái)說(shuō)如何自動(dòng)播放多個(gè)聲音呢?

首先距芬,如果用戶還沒(méi)進(jìn)行交互就調(diào)用播放聲音的API涝开,Chrome會(huì)這么提示:

DOMException: play() failed because the user didn't interact with the document first.

Safari會(huì)這么提示:

NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.

Chrome報(bào)錯(cuò)提示最為友善,意思是說(shuō)蔑穴,用戶還沒(méi)有交互忠寻,不能調(diào)play。用戶的交互包括哪些呢存和?包括用戶觸發(fā)的touchend, click, doubleclick或者是 keydown事件奕剃,在這些事件里面就能調(diào)play.

所以上面提到很多人是監(jiān)聽(tīng)整個(gè)頁(yè)面的點(diǎn)擊事件進(jìn)行播放,不管點(diǎn)的哪里捐腿,只要點(diǎn)了就行纵朋,包括觸摸下滑。這種方法只適用于一個(gè)聲音資源茄袖,不適用多個(gè)聲音操软,多個(gè)聲音應(yīng)該怎么破呢?這里并不是說(shuō)要和瀏覽器對(duì)著干宪祥,“逆天而行”聂薪,我們的目的還是為了提升用戶體驗(yàn)家乘,因?yàn)橛行﹫?chǎng)景如果能自動(dòng)播放確實(shí)比較好,如一些答題的場(chǎng)景藏澳,需要聽(tīng)聲音進(jìn)行答題仁锯,如果用戶在答題的過(guò)程中能依次自動(dòng)播放相應(yīng)題目的聲音,確實(shí)比較方便翔悠。同時(shí)也是討論聲音播放的技術(shù)實(shí)現(xiàn)业崖。

原生播放視頻應(yīng)該就只能使用video標(biāo)簽,而原生播放音頻除了使用audio標(biāo)簽之外蓄愁,還有另外一個(gè)API叫AudioContext双炕,它是能夠用來(lái)控制聲音播放并帶了很多豐富的操控接口。調(diào)audio.play必須在點(diǎn)擊事件里面響應(yīng)撮抓,而使用AudioContext的區(qū)別在于只要用戶點(diǎn)過(guò)頁(yè)面任何一個(gè)地方之后就都能播放了妇斤。所以可以用AudioContext取代audio標(biāo)簽播放聲音。

對(duì)于移動(dòng)端開(kāi)發(fā)可考慮用原生AudioContext胀滚,使用參考:https://juejin.im/post/5af7129bf265da0b8262df4c

對(duì)于瀏覽器pc網(wǎng)頁(yè)可以不用這么麻煩趟济,設(shè)置了muted屬性就可以繞過(guò)去,解決方案就是默認(rèn)先加上muted標(biāo)簽咽笼,要播放的時(shí)候先關(guān)掉靜音顷编,再調(diào)用play方法播放就可以。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剑刑,一起剝皮案震驚了整個(gè)濱河市媳纬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌施掏,老刑警劉巖钮惠,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異七芭,居然都是意外死亡素挽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門狸驳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)预明,“玉大人,你說(shuō)我怎么就攤上這事耙箍∽罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵辩昆,是天一觀的道長(zhǎng)阅酪。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么术辐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任砚尽,我火速辦了婚禮,結(jié)果婚禮上辉词,老公的妹妹穿的比我還像新娘尉辑。我一直安慰自己,他們只是感情好较屿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卓练,像睡著了一般隘蝎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上襟企,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天嘱么,我揣著相機(jī)與錄音,去河邊找鬼顽悼。 笑死曼振,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔚龙。 我是一名探鬼主播冰评,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼木羹!你這毒婦竟也來(lái)了甲雅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坑填,失蹤者是張志新(化名)和其女友劉穎抛人,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體脐瑰,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妖枚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苍在。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绝页。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忌穿,靈堂內(nèi)的尸體忽然破棺而出抒寂,到底是詐尸還是另有隱情,我是刑警寧澤掠剑,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布屈芜,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏井佑。R本人自食惡果不足惜属铁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躬翁。 院中可真熱鬧焦蘑,春花似錦、人聲如沸盒发。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宁舰。三九已至拼卵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛮艰,已是汗流浹背腋腮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壤蚜,地道東北人即寡。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袜刷,于是被迫代替她去往敵國(guó)和親聪富。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 近年來(lái)水泉,美國(guó)的喪尸電影及電視劇大行其道善涨,乃至香港、臺(tái)灣草则、韓國(guó)也爭(zhēng)相拍攝相關(guān)題材的影片钢拧,幾乎每一年都有多部新的喪尸影...
    不文生閱讀 18,367評(píng)論 19 156
  • 匆忙趕路份殿,一片泛黃的心形落葉赫然出現(xiàn)在眼前膜钓。也許世界的每個(gè)角落都會(huì)有一顆心在偷偷等待…… 回望2017年唯一能讓我...
    大Amo閱讀 342評(píng)論 0 1
  • 準(zhǔn)備開(kāi)始學(xué)習(xí)結(jié)構(gòu)思考力課程,那不妨先從李忠秋老師的代表著作《結(jié)構(gòu)思考力》開(kāi)始學(xué)起卿嘲。按照易仁永澄老師的“檢視...
    Ares1981閱讀 696評(píng)論 0 2