我有一个音频标记,只有当Ajax请求返回数据时才会播放。
我知道iPad只在用户交互的情况下播放视频和音频。
但是我的Ajax请求是在用户单击按钮时发出的。所以,我有一个用户交互。
所以,我的问题是,如果有一种方法可以让我的用户交互"验证"在用户点击几秒钟后播放声音?
我不确定这是最好的解决方案,但它有效。。。当AJAX开始时,我开始一个循环,等待它完成。当它发生时,循环会发出声音。我注意到它不是一直工作,我认为如果音频还没有加载,它就会崩溃(我没有收到任何错误,但如果我在页面加载后等待几秒钟,它似乎没问题)
编辑:虽然这对我有效(iPad2[iOS 5.1.1]),但对OP无效(iPad1[iOS4])。其他人能分享他们的结果吗?链接(加载后等待几秒钟)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>iPad Audio</title>
</head>
<body>
<audio id="noise"><source src="beep.mp3" type="audio/mp3" /></audio>
<button onclick="begin_test();">Go</button>
</body>
<script>
var snd=document.getElementsByTagName("audio")[0];
snd.load();
var shouldPlay=false;
function begin_test(){
shouldPlay=false;
play();
var xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
shouldPlay=true;
}
}
xmlhttp.open("GET","levels.txt",true);
xmlhttp.send();
}
function play(){
if (shouldPlay){
snd.play();
shouldPlay=false;
}
else{
setTimeout(play,10);
}
}
</script>
</html>