我们有一组 HTML 块——比如说大约 50 个——它们被迭代地解析并具有Audio
动态添加的对象:
var SomeAudioWrapper = function(name) {
this.internal_player = new Audio();
this.internal_player.src = this.determineSrcFromName(name);
// ultimately an MP3
this.play = function() {
if (someOtherConditionsAreMet()) {
this.internal_player.play();
}
}
}
假设我们在页面加载时生成大约 40 到 80 个,但对于特定配置总是相同的集合。在所有测试过的浏览器中,这个基本策略似乎都有效。音频加载并播放成功。
在 IE 9 和 10 中,出现了一个暂时性错误。有时,打电话.play()
在内部Audio
对象失败。经检查,内部Audio
对象有一个.error.code
of 4
(MEDIA_ERR_SRC_NOT_SUPPORTED http://msdn.microsoft.com/en-us/library/ie/ff974742(v=vs.85).aspx)。文件.duration
shows NaN
.
然而,这种情况只是偶尔发生,并且发生在音频文件的某些随机子集上。例如。,usually file_abc.mp3
播放,但有时会产生错误。无论哪种情况,网络监视器都显示下载成功。尝试通过控制台重新加载文件也会失败——并且 IE 的网络监视器中没有出现任何请求:
var a = new Audio();
a.src = "the_broken_file.mp3";
a.play(); // fails
a.error.code; // 4
即使附加查询值也无法重新获取音频或触发任何网络请求:
var a = new Audio();
a.src = "the_broken_file.mp3?v=12345";
a.play(); // fails
a.error.code; // 4
但是,尝试使用相同的代码在新选项卡中加载损坏的音频文件是有效的:“不受支持的src”可以完美播放。
我们可能会遇到任何资源限制吗? (也许“不受支持”的音频下载较晚?)是否有任何已知的错误?解决方法?
我认为我们可以很容易地检测到文件何时失败。出于其他兼容性原因,我们运行一个循环来检查音频进度和完成状态,以防止在音频完成之前通过应用程序进行进度(评估)。我们可以很容易地寻找.error
价值观——但如果我们找到了一个价值观,我们该怎么办!?
Addendum:我刚刚发现一个相关问题(IE 9/10/11 声音文件限制 https://stackoverflow.com/questions/22522493/ie-9-10-11-sound-file-limit)表明未记录的限制为 41——不确定这是否是“41 个音频文件请求”、“41 个内存中音频对象”的限制,或者what。我还没有找到任何关于此事的 M$ 文档——或者已知的解决方案。