2012-08-17 41 views
2

我有一個音頻標記,僅當Ajax請求返回數據時才播放。html <audio>與以前的用戶交互在iPad上播放標記

我知道iPad只能通過用戶交互播放視頻和音頻。

但是我的Ajax請求是在用戶點擊一個按鈕時產生的。所以,我有一個用戶交互。

所以,我的問題是,如果有一種方法可以讓我的用戶交互「驗證」在用戶單擊幾秒後播放聲音?

+0

你試過了嗎? – 2012-08-17 01:58:39

+0

嘗試過什麼,機器人? – 2012-08-17 02:00:28

+0

用ajax調用測試頁,最後播放聲音...在ipad上試試它,看看它是否工作...我只是無法從你的文章中知道如果你知道它不工作,或者你只是想知道 – 2012-08-17 02:01:58

回答

0

我不確定這是最好的解決方案,但它工作...當AJAX開始時,我開始一個循環等待它完成。當它發生時,循環會發出聲音。我注意到它一直不工作,我認爲如果音頻還沒有加載,它會崩潰(我沒有得到任何錯誤,但是如果我在頁面加載後等待幾秒鐘,它似乎沒關係)

編輯:雖然這適用於我(iPad2 [iOS 5.1.1]),它不適用於OP(iPad1 [iOS4])。其他人可以分享他們的結果嗎? link(並在加載後等待幾秒鐘)

<!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>