Safari音频标签不起作用

Mat*_*man 14 javascript safari jquery html5-audio

我使用这个简单的代码处理HTML5音频标签:

HTML

<audio id="audioFrenata">
<source src="sounds/frenata.ogg">
<source src="sounds/frenata.mp3"></audio>
Run Code Online (Sandbox Code Playgroud)

JS

$('#audioFrenata').on('ended', function() {
        manageImageObjectsLevel();
    }).get(0).play();
Run Code Online (Sandbox Code Playgroud)

使用Chrome,这可以正常工作,Windows上的Safari 5.1.7和iPad 3上的Safari我收到:

'undefined' is not a function (evaluating '$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play()')
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么?

Las*_*sen 16

我遇到了完全相同的问题,我发现这是由于Safari中的以下限制:

在iOS上的Safari(适用于所有设备,包括iPad)中,用户可能位于蜂窝网络上并按数据单元收费,因此禁用预加载和自动播放.在用户启动数据之前不会加载任何数据.这意味着JavaScript play()和load()方法在用户启动回放之前也处于非活动状态,除非用户操作触发play()或load()方法.换句话说,用户启动的播放按钮有效,但onLoad ="play()"事件不起作用.

参考:http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

解决此问题的一种方法是默认静音,当用户"取消静音"时,您可以创建HTML5 Audio对象的实例并将其存储在"静态"/"全局"变量中,并将其用于进一步回放.

- 更新

这是一篇描述该问题以及如何处理该问题的博文:http://blog.gopherwoodstudios.com/2012/07/enabling-html5-audio-playback-on-ios.html

这是一个类似的stackoverflow问题,讨论相同的事情:使用HTML5在iPad上自动播放音频文件

以下是我编写的用于处理HTML5中音频播放的JavaScript"模块":

NS.modules.html5.audio = (function () {

    var _snd = false;

    function playAudio(src) {
        if (!_snd)
            _snd = new Audio();
        else
            $(_snd).empty();

        for (var i = 0; i < src.length; i++) {
            var source = document.createElement('source');
            source.type = src[i].type;
            source.src = src[i].src;
            _snd.appendChild(source);
        }

        _snd.load(); // Needed on safari / idevice
        _snd.play();
    };

    var playAudio = function () {
        var src = [
            { src: "/path/to/audio.wav", type: "audio/vnd.wave" },
            { src: "/path/to/audio.ogg", type: "application/ogg; codecs=vorbis" },
            { src: "/path/to/audio.mp3", type: "audio/mpeg" }
        ];
        playAudio(src);
    };

    return {
        playAudio: playAudio,
        // more play functions here
    };
})();
Run Code Online (Sandbox Code Playgroud)


Abu*_*kar 0

检查您提到的浏览器是否支持您想要的 HTML5 功能。您可以在这里查看。希望对你有帮助。