【发布时间】:2018-07-20 13:37:44
【问题描述】:
我有一段时间正在生产一个 Angular 2 项目,我被告知最近某些功能在 Chrome 中无法正常工作。 Safari 运行良好。
经过一番调查,我意识到问题在于没有触发音频元素“结束”事件。 我正在打印 currentTime / Duration 并且所有这些都会在完成的随机百分比处自动停止。 例如
我完全不知道是什么突然导致了这种情况。有什么想法吗?
let el = <HTMLMediaElement>document.getElementById(id);
this.audio.src = <string>(<HTMLSourceElement>el.children[0].getAttribute("src"));
this.audio.load();
this.audio.play();
this.audio.onended = function() {
...// THIS NEVER RUNS
}
this.audio.ontimeupdate = function() {
console.log(this.currentTime, this.duration);
...// THIS DOES BUT currentTime never reaches duration
}
更新: 我目前正在使用 Chrome 最新版本 64.0.3282.140 进行测试,当我降级到版本 63 时,问题就消失了......
【问题讨论】:
-
不能说没有一些代码。
-
@Phix 编辑问题并添加代码
-
这是什么音频格式?长期以来(几年),这一直是 chrome 中的一个问题。我怀疑这与使用某些格式预先估计持续时间有关,如果实际持续时间较短,则忘记抛出事件。一种解决方法可能是使用 setTimeout ,但如果用户可以在某个时候暂停音频(您必须取消超时,从当前位置计算提醒等等),这将不会那么优雅。不过,任何解决方法(包括检测事件何时不再广播)都可能会给人一种骇人听闻的感觉。
-
@K3N 很有趣,我会对此进行调查。但是(请参阅编辑)这已经正常工作了将近一年,并且随着谷歌最新更新:64.0.3282.140 开始出现故障。我看到他们包含了一些与音频和视频相关的更改 (en.wikipedia.org/wiki/Google_Chrome_version_history)
-
这里有一个类似的问题:audio-playback-halts-stops-on-chrome-64 - 似乎可以通过重新编译您的 mp3 文件来解决。无论如何,这是一个 Chrome 错误,因为在旧版本和不同的浏览器中一切正常。
标签: html angular google-chrome html5-audio