我使用HTML5音频标签一个接一个地播放音频文件,但我的例程似乎让Firefox崩溃了。它仅在我添加alert()时有效。
我有一个PHP例程,如果另一个应用程序向服务器发送了新事件,则每2秒检查一次,如果有,我在屏幕上写下新事件的名称。其中一些事件具有与之相关的音频文件(它们可以是不同的声音),因此当事件到达时,必须播放音频文件。
我有这个例程:
当事件到达时,我调用此函数:playSound(sound_name);
function playSound(sound_name){
if (!current_sound){
current_sound = true;
$("#audio-player")[0].src = "../snd/"+sound_name;
//$("#audio-player")[0].load();
$("#audio-player")[0].play();
}
else {
//alert(sound_name);
playSound(sound_name);
}
}
变量" current_sound"当audio_player触发"结束"时设置为false音频标签的事件。我为这个事件添加了一个函数,所以每当它被触发时它都会将变量current_sound设置为false。
所有这些代码的问题在于它只能在函数playSound()中使用该警报。如果我评论它,Firefox崩溃并开始说js脚本花了太长时间才完成(他们的js脚本之一,而不是我的)。
我搜索了很多,但我只找到了有关如何复制给定文件列表的示例,这些文件在我的情况下无用,因为我不知道哪个文件将事先播放。
有什么建议吗?
答案 0 :(得分:1)
你有一个简单的递归调用。 alert
只会增加延迟并“中断”该执行链,允许其他地方的线程在边缘获取一个单词。大概你在其他地方设置代码current_sound
到false
。
不要试图像这样“等待”,而是使用回调函数 - 无论你在哪里做current_sound = false
,而是执行.play()
。
答案 1 :(得分:0)
第一次通话后,current_sound
将设为true。这将导致每次都执行else分支,再次调用该函数。这导致无休止的递归。