ChromeとSafariでaudioタグを自動再生するための対策
以前までは、audio
タグにautoplay
属性を付与することで音声の自動再生が可能でしたが…
<audio autoplay id="audio">
<source src="audio/source.mp3">
</audio>
ChromeとSafariのメディア要素(<video>
, <audio>
)の自動再生におけるポリシーの変更され、下記のコードのようなclick
イベントを使用しないとaudio
タグの自動再生ができなくなりました。
<audio autoplay id="audio">
<source src="audio/source.mp3">
</audio>
document.addEventListener('click', audioPlay);
function audioPlay() {
document.getElementById('audio').play();
document.removeEventListener('click', audioPlay);
}
画面のいずれかをクリックしないと音楽が流れないのは、正直微妙です。
SafariとChromeへの対策
この問題は、 iframe
タグで無音ファイルを埋め込むことで解決できます。
こちらのリンクは0.5sの無音ファイルです。このようなファイルをiframe
タグで埋め込むことによりファイルは無音ですがブラウザ側は音声の再生が許可されたと認識しaudio
タグの自動再生も許可され、autoplay
が設定されているものは、自動で再生され始めます。
<iframe src="https://raw.githubusercontent.com/anars/blank-audio/master/500-milliseconds-of-silence.mp3" allow="autoplay" id="audio" style="display:none"></iframe>