autoplay標籤在chrome中失效的問題

早在我的第一期前端五子棋中就遇到這個令人頭疼的問題,最開始是由於谷歌版本的更新,爲了更安全所以就取消autoplay這個自動播放的功能,後來我也再網上搜索到了很多解決方案,也只是瞎貓碰到死耗子恰巧解決了整個問題,至於我在前端五子棋第二版所說的那個解決方案,僅僅是由於服務器不支持中文,使得中文名亂碼而找不到mp3音頻所導致的問題。
進入正題,可以參看我給出的五子棋的代碼爲例來敘述我的解決過程。(兩版本對於此問題的處理代碼是一樣的)
首先,網上最流行的一勞永逸的方法是直接更改谷歌瀏覽器對於Autoplay 的默認設置。
詳細步驟如下:
在chrome 瀏覽器中輸入:chrome://flags,搜索“Autoplay policy”,默認爲“Default”,修改爲 “No user gesture is required” 就可以了
顯然,這種方法我使用失敗了,失敗的原因是根本搜索不到Autoplay policy,估計應該就是我的谷歌有毒。所以後面的方法我只能從代碼的角度來解決。
用代碼解決,說白了也就是自己用代碼實現autoplay的功能,也就是變成“手動的自動播放”。
此時,肯定是需要js代碼來實現,其實在這裏用代碼實現也就一行代碼而已:

document.querySelector('.music').play();

運氣好,就直接成功了,想手動暫停音樂,可以使用下面的一行代碼:

document.querySelector('.music').muted = true;

詳細細節場景可以參看前端五子棋代碼。
但是如果運氣不好,就可能出現如下的界面顯示:
在這裏插入圖片描述
幸好這個exception挺良心,錯誤的最後面還給出了一個連接,點進去看看:
在這裏插入圖片描述
這個頁面給出了好幾種解決方案。比如使用iframe標籤,默認設置瀏覽器爲靜音模式然後再手動取消靜音,捕獲因此問題帶來的異常並在catch塊裏面進行操作等等。
有興趣的夥伴可以參照原本自行嘗試,這裏我就不多做介紹,因爲這個頁面的所有方法也沒能幫我解決掉這個問題。
那麼問題到底出在哪呢?這也是爲什麼我最開始說有一定幸運的成分。
首先,我們知道報錯是因爲play()這個方法有問題,但是谷歌本身有不能支持autoplay,並且還無法修改谷歌對此標籤的默認設置,這就真的很腦殼疼。
直接給出答案吧,我這裏之所以報出這個錯誤是因爲我在js文件中直接調用此方法,而恰巧我在程序裏使用play方法都是在綁定的事件函數中調用能夠正常運行,真的很amazing!
雖然我目前還不知道這是什麼原因,但是事實上真的是可以這麼用。(知道原理的大佬歡迎評論區賜教),至於play方法是否還支持在普通函數中的調用我沒有去測試,有興趣的夥伴可以自己去玩玩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章