不知何故在iOS Safari上暂停或暂停javascript

时间:2013-09-11 20:57:28

标签: javascript jquery ios

我有一段javascript,我正在播放这样的声音......

var audio = document.createElement('audio');
audio.src = 'folder/test.wav';
audio.play();

我需要播放多个间隔开的文件,以便您知道它的含义。 iOS不允许您使用setTimeout。我在单独的函数中尝试过,当使用setTimeout时,它无法从第二个音频剪辑中发出声音。还有其他想法吗?

修改

我有这个功能:

function playaudio(file) {
    var audio = document.createElement('audio');
    audio.src = 'folder/'+file+'.wav';
    audio.play();
}

这样称呼它:

playaudio("test1");
playaudio("test2");

我需要它在test1和test1之间暂停,这样它们就不能一起玩了。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用iOS Native代码触发Javascript方法调用:

[webViewObject stringByEvaluatingJavaScriptFromString:@"playNextSound();"];

其中playNextSound是由UIWebView加载的页面中定义的JS方法。 而不是setTimeout,您可以使用NSTimer使本机计时器空出音频播放。

答案 1 :(得分:0)

setTimeout()适用于iOS。该问题可能与浏览器处理<audio><video>内容的方式有关。

iOS只会在用户输入触发时播放<audio><video>内容。你提到你的第一个剪辑的初始audio.play()调用正常,所以我猜它是用户触发的。问题在于setTimeout() clear the call stack内的功能,因此浏览器可能不再将其视为用户驱动,即使它们之前是点击事件。

最简单的解决方案是将多个音频剪辑合二为一。您也可以在开始时用静音填充想要延迟的片段,并在点击事件后立即播放它们(假设您的目标操作系统版本一次支持多个音频对象)