javascript - 为什么 Chrome 无法可靠地加载 3 个简单的音频文件?

标签 javascript html 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. 打开“开发工具”
  3. 选择“网络”标签
  4. 在当前选项卡中打开测试用例“index.html”
  5. 查看“说明”,然后根据需要刷新

说明:

  • 第一次加载测试用例时,您会注意到所有 3 个音频文件都显示在“网络”选项卡中。它们都将成功启动和完成加载。
  • 但是刷新后,可能不会显示或再次加载任何音频文件。
  • 奇怪的是,等待一两分钟后,问题会暂时消失,下次刷新将再次正确加载所有音频文件。
  • 但之后,加载将像以前一样失败。

最佳答案

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

Yes, I think I just mistook this behavior for a problem, because I'm seeing an HTML5 video game frequently get stuck at the "preloading" phase, and it seems these audio files are to blame, because removing them fixes the issue.

我发现,如果我执行测试用例中的操作,只需创建 Audio 对象,但将其添加到 DOM,通常我从它们那里得到了 canplay 事件,但并非总是如此 - 大约十分之一的乘以一个、两个,甚至全部三个都不会触发 canplay。但如果我将它们附加到 DOM,我总是会收到 canplay 事件。

因此,如果您没有将它们添加到 DOM 中(只需 document.body.appendChild(new Audio(path)); 就足够了),这可能是预加载的原因 - 永远不会-结束问题。

关于javascript - 为什么 Chrome 无法可靠地加载 3 个简单的音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41299609/

相关文章:

javascript - 无法输入,因为没有通知 Uncaught SyntaxError : Unexpected token)

javascript - 设置 Javascript API accessToken

html - 如果有些列除以 3,有些列除以 2,如何对齐我的列?

html - Bootstrap 模式内的 ng-click 事件未触发

html - 链接时如何打开我的 Electron 程序(如 myprogram ://a/a) is clicked in a web browser

javascript - 跟踪 Web 应用程序中所有 Javascript 的执行

javascript - 如何从触发器 x 触发 y 元素的 css 动画

javascript - 将数据或数组索引附加到 anchor 标记

html - 需要帮助修复 CSS 四列表

javascript - 我可以用 javascript 在 chrome 中按下 "back"按钮吗