为什么Chrome无法正常加载3个简单的音频文件?

时间:2016-12-23 10:25:31

标签: javascript html5 google-chrome html5-audio

问题:音频文件经常无法加载。因为他们甚至没有出现在"网络" Chrome开发工具中的标签。

测试用例:

的index.html

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="main.js"></script>
</head>
<body>
</body>
</html>

main.js

['audio1.ogg', 'audio2.ogg', 'audio3.ogg'].forEach((path) => {
    new Audio(path);
});

音频文件:

重现步骤:

  1. 在Chrome浏览器中打开新标签页
  2. 打开&#34;开发工具&#34;
  3. 选择&#34;网络&#34;标签
  4. 打开测试用例&#34; index.html&#34;在当前标签中
  5. 参见&#34;说明&#34;然后根据需要刷新
  6. 说明:

    • 第一次加载测试用例时,您会注意到所有3个音频文件都显示在&#34; Network&#34;标签。他们将成功开始和完成加载。
    • 但是,在刷新时,可能没有任何音频文件会显示或再次加载。
    • 奇怪的是,通过等待一两分钟,问题暂时消失,下一次刷新将再次正确加载所有音频文件。
    • 但之后,负载会像以前一样失败。

1 个答案:

答案 0 :(得分:2)

我可以复制它们没有显示在网络选项卡中(即使设置了禁用缓存标志),但文件确实加载并正确播放 - 大多数时间。

  

是的,我想我只是把这个行为误认为是一个问题,因为我看到一个HTML5视频游戏经常陷入“预加载”阶段,似乎这些音频文件应该受到指责,因为删除它们会修复问题。

我发现如果我在你的测试用例中做了什么,只是创建Audio对象,但是而不是将它添加到DOM,通常我得到{ {1}}来自他们的事件,但并非总是如此 - 大约十分之一,一,二,甚至全部三个都不会触发canplay。但如果我将它们附加到DOM,我总是得到canplay事件。

因此,如果你没有将它们添加到DOM(仅canplay就足够了),这可能是导致预加载 - 永无止境问题的原因。