<audio>元素在Safari </audio>中根本不起作用

时间:2013-03-12 09:12:40

标签: javascript jquery audio safari

我正在尝试将音乐添加到我正在使用JS和jQuery编写的虚拟游览应用程序中,到目前为止,我的代码(如下所示)在Chrome,FF,IE9和Opera中运行良好。但是在Safari 5.1.7中,这是Windows机器的最新版本,它只是不起作用......通过我对问题的研究,我知道Safari不会自动播放音乐而且必须启动它手动,但当我点击播放按钮时,没有任何反应。而且,顺便说一句,Safari中的代码检查器显示我的音频标签与音乐源在一起,因此我认为它与DOM没有任何关系。关于我的问题的任何想法?

HTML

<div id="musicBtns">
    <p>Music:</p>
    <p id="musicPlayBtn">Play</p>
    <p>/</p>
    <p id="musicPauseBtn">Pause</p>
</div>

我在JS中的音乐对象

var Music = 
    {
        musicBtns: $('#musicBtns'),
        playBtn: $('#musicPlayBtn'),
        pauseBtn: $('#musicPauseBtn'),
        isPlaying: false,

        init: function()
        {
            if(!music.includeMusic) // If the client didn't want any music in the tour app, remove the music btns from the DOM
            {
                this.musicBtns.remove();
            }
            else // Else, setup the audio element
            {
                var parent = this;
                var audio = $('<audio loop="true">');

                if(music.autoplay) 
                {
                    audio.attr('autoplay', 'autoplay');
                    this.isPlaying = true;
                    this.togglePlayPause();
                }

                // Add a source elements and appends them to the audio element 
                this.addSource(audio, music.ogg); // 'music.ogg' is a reference to the path in a JSON file  
                this.addSource(audio, music.mp3);
                this.musicBtns.append(audio);

                // Add event listeners for the play/pause btns
                this.playBtn.click(function()
                {
                    audio.trigger('play');
                    parent.isPlaying = true;
                    parent.togglePlayPause();
                });

                this.pauseBtn.click(function()
                {
                    audio.trigger('pause');
                    parent.isPlaying = false;
                    parent.togglePlayPause();
                });
            }
        },
        addSource: function(el, path)
        {  
            el.append($('<source>').attr('src', path));  
        },
        // Add or remove classes depending on the state of play/pause
        togglePlayPause: function()
        {
            if(this.isPlaying)
            {
                this.playBtn.addClass('underline');
                this.pauseBtn.removeClass('underline');
            }
            else
            {
                this.playBtn.removeClass('underline');
                this.pauseBtn.addClass('underline');
            }
        }
    }

编辑:这可能是Safari中的错误吗?

2 个答案:

答案 0 :(得分:1)

所以问题结果与QuickTime有关。我想我必须将它从机器上删除一段时间,因为我认为我不需要它。重新安装QuickTime后,Safari使用音频标签播放音乐没有问题。自动播放甚至也可以。

有点好笑如何支持本机HTML5音频/视频的支持者,不支持没有插件的HTML5音频/视频......

答案 1 :(得分:0)

在Safari上的HTML5视频中我遇到了一个问题,我必须“加载”(我认为,要么启动缓冲区,要么加载整个内容),然后再将其设置为播放。这似乎实际上使一些webkit浏览器中的东西工作。如下所示:

var a = new Audio("file.mp3");
a.load();
a.play();

值得一试