3

我正在尝试制作一个适用于每个主要浏览器的 HTML5 音频播放列表:Chrome、Safari、Firefox、IE9+。但是,我不知道如何以跨浏览器兼容的方式更改源。

更新例如,更改<source>标签的srcs 在 Chrome 中有效,但在 Safari 中无效。虽然下面使用@eivers88 的解决方案有效,但对我来说只是更改标签的scanPlayType似乎更容易。谁能向我解释为什么我下面的代码可以在 Chrome 中运行,但不能在 Safari 中运行?<source>src

JS:

var audioPlayer=document.getElementById('audioPlayer');
var mp4Source=$('source#mp4');
var oggSource=$('source#ogg');
$('button').click(function(){    
  audioPlayer.pause();
  mp4Source.attr('src', 'newFile.mp4');
  oggSource.attr('src', 'newFile.ogg');
  audioPlayer.load();
  audioPlayer.play();
});

HTML:

<button type="button">Next song</button>
<audio id="audioPlayer">
  <source id="mp4" src="firstFile.mp4" type="audio/mp4"/> 
  <source id="ogg" src="firstFile.ogg" type="audio/ogg" />                      
</audio>

单击按钮后检查 HTML,<source src=""/>Safari 中确实发生了变化,只是没有发出 HTTP 请求,因此文件没有被load()编辑和play()编辑。有人对此有任何想法吗?

4

2 回答 2

5

这是一个工作示例。它与您所拥有的有点不同,但希望这会有所帮助。

HTML:

<button type="button">Next song</button>

Javascript/jQuery:

    var songs = [
    '1976', 'Ballad of Gloria Featherbottom', 'Black Powder' 
]
var track = 0;
var audioType = '.mp3'
var audioPlayer = document.createElement('audio');

$(window).load(function() {

    if(!!audioPlayer.canPlayType('audio/ogg') === true){
        audioType = '.ogg' //For firefox and others who do not support .mp3
    }

    audioPlayer.setAttribute('src', 'music/' + songs[track] + audioType);
    audioPlayer.setAttribute('controls', 'controls');
    audioPlayer.setAttribute('id', 'audioPlayer');
    $('body').append(audioPlayer);
    audioPlayer.load();
    audioPlayer.play();

});

$('button').on('click', function(){
    audioPlayer.pause();
    if(track < songs.length - 1){
        track++;
        audioPlayer.setAttribute('src', 'music/' + songs[track] + audioType);
        audioPlayer.load();
        audioPlayer.play();
    }
    else {
        track = 0;
        audioPlayer.setAttribute('src', 'music/' + songs[track] + audioType);
        audioPlayer.load();
        audioPlayer.play();
    }
})
于 2012-06-24T04:08:01.180 回答
1

出于某种原因,Safari 不能使用<source>标签在歌曲之间交换,但 Chrome 可以。只需更改加载到标签src属性中的内容即可<audio>在 Chrome 和 Safari 上运行,但随后会出现 ogg 与 mp3 的问题。

我想解决这个 ogg 与 mp3 问题的一种方法是使用 Modernizr 进行功能检测来加载 Firefox 中的 ogg mime 类型和 Chrome/Safari 中的 mp3。这是一个参考: Detecting html5 audio support with Modernizr

于 2012-06-24T05:20:17.223 回答