javascript audio currentTime使一些浏览器崩溃

javascript audio currentTime crashes some browsers

本文关键字:浏览器 崩溃 audio currentTime javascript      更新时间:2023-09-26

我在应用程序中播放的音频有问题。我有HTML音频:

    <audio id="correct-sound">
        <source src="sounds/catch.mp3" type="audio/mpeg">
    </audio>

然后在我的游戏中我有这样的代码

    jQuery('#correct-sound').get(0).currentTime = 0;
    jQuery('#correct-sound').get(0).play();

但对于某些浏览器,它会崩溃所有脚本。我已经包含了旧的firefox try,catch,但它对其他一些设备没有帮助(在firefox中它有帮助)

try{
    jQuery('#correct-sound').get(0).currentTime = 0;
    jQuery('#correct-sound').get(0).play();
}catch(err){
    console.log(err);
}

问题是我无法复制那个错误,但当我删除某些浏览器的代码时,这个崩溃就被删除了。所以我只需要在发生碰撞时以某种方式,这样他们就可以跳过这一部分,继续前进,比如尝试接球。有什么想法吗?

认为这应该有效:

if (typeof jQuery('#correct-sound').get(0).currentTime !== 'undefined') {
  jQuery('#correct-sound').get(0).currentTime = 0;
}

audio元素是一个新的HTML5元素,它的功能并不存在于所有浏览器中。在这里查看它当前的支持。

目前,我会检查Audio是否存在:

if (window.Audio !== undefined) {
    jQuery('#correct-sound').get(0).currentTime = 0;
    jQuery('#correct-sound').get(0).play();
}

我一直在谷歌Chrome中工作,遇到了这个问题。奇怪的是,在过去,我曾在视频中毫无问题地更改时间,所以我知道这是可能的。

我似乎记得一个技巧,如果你把currentTime设置为字符串而不是数字,它就会起作用。所以我刚换了

audio.currentTime=0;

audio.currentTime="0";

它现在工作没有问题!

如果您试图将currentTime设置为可变值,请尝试:

audio.currentTime=String(newTime);

我不知道为什么currentTime必须设置为字符串,因为如果你在控制台中检查音频片段的currentTime值,你会得到一个数字,而不是字符串。但它有效!

编辑:有趣的是,如果我在控制台中更改currentTime,但使用数字(而不是字符串)设置它,它就会起作用。因此,控制台影响currentTime的方式与我的外部JavaScript文件不同。在控制台中将currentTime更改为数字是有效的,无论我之前是否将其更改为字符串。