我正在尝试将音乐添加到我正在用 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 中的错误吗?