ios下audio不能自动播放的问题

Posted 顾笙言啊顾笙言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios下audio不能自动播放的问题相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Fake auto play html audio in ios Safari the right way</title>
</head>
<body>

    <audio id="bgmusic" autoplay preload loop></audio>
    <script>
    (function() {
        function log(info) {
            console.log(info);
            // alert(info);
        }
        function forceSafariPlayAudio() {
            audioEl.load(); // iOS 9   还需要额外的 load 一下, 否则直接 play 无效
            audioEl.play(); // iOS 7/8 仅需要 play 一下
        }

        var audioEl = document.getElementById(bgmusic);

        // 可以自动播放时正确的事件顺序是
        // loadstart
        // loadedmetadata
        // loadeddata
        // canplay
        // play
        // playing
        // 
        // 不能自动播放时触发的事件是
        // iPhone5  iOS 7.0.6 loadstart
        // iPhone6s iOS 9.1   loadstart -> loadedmetadata -> loadeddata -> canplay
        audioEl.addEventListener(loadstart, function() {
            log(loadstart);
        }, false);
        audioEl.addEventListener(loadeddata, function() {
            log(loadeddata);
        }, false);
        audioEl.addEventListener(loadedmetadata, function() {
            log(loadedmetadata);
        }, false);
        audioEl.addEventListener(canplay, function() {
            log(canplay);
        }, false);
        audioEl.addEventListener(play, function() {
            log(play);
            // 当 audio 能够播放后, 移除这个事件
            window.removeEventListener(touchstart, forceSafariPlayAudio, false);
        }, false);
        audioEl.addEventListener(playing, function() {
            log(playing);
        }, false);
        audioEl.addEventListener(pause, function() {
            log(pause);
        }, false);

        // 由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio,
        // 因此我们通过一个用户交互事件来主动 play 一下 audio.
        window.addEventListener(touchstart, forceSafariPlayAudio, false);

        audioEl.src = http://www.w3school.com.cn/i/song.mp3;
    })();
    </script>
</body>
</html>

看了下代码,大概是因为ios内置的系统会拦截audio的自动播放,所以需要一个交互,这个代码的交互就是当屏幕被touchstart之后开始加载音乐然后播放.转需

以上是关于ios下audio不能自动播放的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于html5 audio 标签在ios系统上不能正常自动播放的解决办法

关于html5 audio 标签在ios系统上不能正常自动播放的解决办法

audio元素和video元素在ios和andriod中无法自动播放的情况下,怎么应对?

深刻求解答:ios使用audio标签不能播放网络音频 求解决方案!!!

微信网页ios自动播放音频、视频

ios设置音乐audio自动播放