2

Ajax リクエストがデータとともに返された場合にのみ再生されるオーディオ タグがあります。

iPad はユーザーの操作によってのみビデオとオーディオを再生することを知っています。

しかし、ユーザーがボタンをクリックすると、私の Ajax リクエストが行われます。だから、私はユーザーインタラクションを持っています。

だから、私の質問は、ユーザーがクリックしてから数秒後にサウンドを再生するために、ユーザーインタラクションの「認証」を維持する方法があるかどうかです。

4

1 に答える 1

0

これが最善の解決策かどうかはわかりませんが、うまくいきます... 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>
于 2012-08-17T03:18:19.470 に答える