私は JS と jQuery で書いている仮想ツアー アプリケーションに音楽を追加しようとしていますが、これまでのところ、以下に示すコードは Chrome、FF、IE9、および Opera でうまく動作します。しかし、Windows マシン用に入手できる最新の Safari 5.1.7 では、まったく機能しません... 問題を調査したところ、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 のバグでしょうか?