在 <audio> 元素上设置 currentTime 会使 Firefox 崩溃
Setting currentTime on <audio> element crashes Firefox
我发现以编程方式在 HTML5 <audio>
元素上设置 currentTime
属性会使 Firefox 43 崩溃(实际上会杀死整个浏览器,而不仅仅是产生 JS 错误)
我的JavaScript代码如下:
// 'offset' variable set to valid numeric value elsewhere
audio.addEventListener("canplay", function() {
audio.currentTime = offset;
});
audio.play();
相同的代码在最新的 Chrome (47.0)
中运行良好
原来我的代码有 2 个问题。为了防止浏览器崩溃,我需要删除我放在 <audio>
元素上然后忘记的 autoplay
属性:
<audio id="player" autoplay></audio>
在我这样做之后,浏览器不再完全崩溃,但音频播放出现故障并且跳得很快。
第二个问题在我阅读 并在设置 currentTime 后删除事件处理程序后得到解决(原来设置 currentTime
会导致 canplay
事件再次触发,从而创建无限事件循环 - 但仅在 Firefox 上,出于某种原因而不是 Chrome)。
我在 Firefox 和 Chrome 上运行的最终代码如下所示:
function onCanPlay(){
audio.currentTime = offset;
audio.oncanplay = null;
}
audio.oncanplay = onCanPlay;
我发现以编程方式在 HTML5 <audio>
元素上设置 currentTime
属性会使 Firefox 43 崩溃(实际上会杀死整个浏览器,而不仅仅是产生 JS 错误)
我的JavaScript代码如下:
// 'offset' variable set to valid numeric value elsewhere
audio.addEventListener("canplay", function() {
audio.currentTime = offset;
});
audio.play();
相同的代码在最新的 Chrome (47.0)
中运行良好原来我的代码有 2 个问题。为了防止浏览器崩溃,我需要删除我放在 <audio>
元素上然后忘记的 autoplay
属性:
<audio id="player" autoplay></audio>
在我这样做之后,浏览器不再完全崩溃,但音频播放出现故障并且跳得很快。
第二个问题在我阅读 currentTime
会导致 canplay
事件再次触发,从而创建无限事件循环 - 但仅在 Firefox 上,出于某种原因而不是 Chrome)。
我在 Firefox 和 Chrome 上运行的最终代码如下所示:
function onCanPlay(){
audio.currentTime = offset;
audio.oncanplay = null;
}
audio.oncanplay = onCanPlay;