HTML5 音频事件无法在 Chrome 上触发



我正在尝试在我的游戏中设置一个加载进度条,并且我有一个分配给音频onloadeddata属性的函数,但它在 Chrome 中没有触发。它适用于其他浏览器。我还尝试了许多其他活动,如oncanplayoncanplaythroughonloadedmetadata等。它们都不会触发。

我认为这可能与缓存有关。尝试环顾四周,2-3年前有一些关于此的报道,但最近没有。

有没有其他方法可以检测音频是否已加载或使这些事件正常工作?

编辑:这是一个快速示例:http://jsfiddle.net/3vxCu/1/适用于Opera和Firefox,但不适用于Chrome。如果完成加载,它应该在声音响起时发出警报。

由于某种原因,onloadeddata属性似乎不起作用。但是通过addEventListener(或通过jQuery)附加事件处理程序是有效的:http://jsfiddle.net/3vxCu/4/

bgSound = new Audio();
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.preload = "auto";
// Standard browsers (not IE before version 9):
// bgSound.addEventListener("loadeddata", testFunction, false);
// jQuery:
$(bgSound).on("loadeddata", testFunction);
function testFunction () {
    alert("Data loaded");
}

如果附加的 jsfiddle 是你实现代码的方式,那么我想我知道出了什么问题。

您的 jsfiddle 显示:

bgSound = document.createElement('audio');
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.onloadeddata = testFunction;
function testFunction(){
    alert("Data loaded");
}

它应该是这样的:

bgSound = document.createElement('audio');
bgSound.onloadeddata = testFunction; // Event listener is attached _before_ loading the resource
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
function testFunction(){
    alert("Data loaded");
}

基本上,您在指定src附加事件侦听器。指定源应该是您做的最后一件事,因为它会让一切都动起来。Chrome 在代码中附加该事件时可能已经过了为该事件调用侦听器的地步。

最新更新