当使用 <audio> 和 <video> 与 preload="none" 然后尝试从 Javascript 播放时,我在 Firefox 和 Chrome 中得到不同的结果。
假设我使用的是 preload="auto" 或 preload="metadata" :
audio.src = "filename";
audio.play();
这似乎在 Firefox 和 Chrome 中都可以正常工作,但我想使用 preload="none" 然后 Chrome dossent 播放。
所以我正在尝试使用 preload="none" 的代码:
audio.src = url;
audio.load();
audio.addEventListener('canplay', function(e) {
audio.play(); // For some reason this dossent work in Firefox
}, false);
audio.play(); // Added this so Firefox would play
我不知道这是否是正确的方法。
我正在使用:Firefox 20.0.1 Chrome 25.0.1364.172 m
我做了一个演示: http: //netkoder.dk/test/test0217.html
编辑 :
在第二个音频播放器(在演示页面上)中,似乎在使用 preload="none" 时必须使用 load()。但是在 load() 之后立即使用 play() 是正确的,还是在播放之前使用事件等待文件加载的正确方法?
在第三个音频播放器中,似乎 Firefox 20.0.1 dossent 在与 addEventListener() 一起使用时正确支持 canplay 事件,因为它在 load() 之后触发,它在 play() 之后触发,并且在擦洗声音时也会触发成为canplay应该工作的方式。使用 .oncanplay 确实有效。
所以下面的代码似乎工作:
function afspil2(url) {
afspiller2.src = url;
afspiller2.load(); // use load() when <audio> has preload="none"
afspiller2.play();
}
function afspil3(url) {
afspiller3.src = url;
afspiller3.load(); // use load() when <audio> has preload="none"
//afspiller3.addEventListener('canplay', function() { // For some reason this dossent work correctly in Firefox 20.0.1, its triggers after load() and when scrubbing
// afspiller3.play();
//}, false);
afspiller3.oncanplay = afspiller3.play(); // Works in Firefox 20.0.1
}
我更新了演示以包含更改: http: //netkoder.dk/test/test0217.html
我在 afspil3() 函数中添加 addEventListener 的方法看起来不错,因为第一次调用该函数时,addEventListener 中的代码被调用了 1 次。第二次调用该函数时,addEventListener 中的代码被调用了 2 次,然后被调用了 3 次,以此类推。