iPhone/iPad 等行動裝置上的 audio 標籤無法自動播放 (autoplay) 與預載問題
情況描述:Case 中有個互動效果是當使用者開啟手機版網頁後,會進行互動並播放 GIF 動畫(噢,許多舊版本的 Android 裝置是無法播放 GIF 動畫的,這點也要提一下),動畫播放過程中會播放音效。
在 Android 的內建瀏覽器中可自動播放音效,但在 Android 的 Chrome Beta 與 iPhone/iPad 上的 Safari 卻無法正常播放,一點聲音也沒有。而且在桌上型電腦上都可正常地播放。
後來查到 Safari 官方的規範文件 Safari HTML5 Audio and Video Guide 中提到
這是為了防止使用者使用以量計費的行動網路時,自動播放或預載就會不知不覺地花去網路費用。
除非這個播放是使用者「主動」點擊觸發的,不然設什麼屬性都不會自動播放/預載。
能了解它們的立場,是立意良好啦,但在製作一些需要互動體驗的效果上就會受此限制了。跟此篇作者最後的看法一樣,為何不跳出選項(像要求存取 GPS 一樣)讓使用者自由選擇是否要預載/播放聲音呢?
在我的 Case 中,確實是在使用者「主動觸發」,不過是在觸發播放 GIF 動畫後「一段時間」( 我是用 setTimeout 或是 Nodejs 的偵聽來等待 ) 才會播放聲音,那一樣會被判定為「非使用者主動點擊」。
解法有點取巧,就是「先 play 再 pause,接著再 play 」。