38

タグとJavaScriptを使用して小さなサウンドファイルを自動的に再生しようとしています。

<audio id="denied" preload="auto" controls="false">
    <source src="sound/denied.wav" />
 </audio>

そして、JavaScript を使用して、適切なタイミングで次のようにします。

$('#denied')[0].play()

デスクトップの Chrome で問題なく動作します。Android 4.1.1 では、javascript が再生を試みる前に HTML5 オーディオ コントロールで「再生」を押さない限り、サウンドは再生されません。

したがって、基本的に Android ブラウザ (株式または Dolphin) は、ユーザーが javascript の前のある時点でオーディオを開始しない限り、オーディオを再生しません。これは意図したものですか?これを回避する方法はありますか?

4

9 に答える 9

18

さて、私の目的のために、これが私がしたことです:

幸いなことに、ユーザーが音声を開始する動作をトリガーする前に、ボタンをクリックする必要があります。要素のボリュームを 0.0 に設定し、このボタンをクリックすると「再生」します。

サウンドが無音で再生された後、ボリューム プロパティを 1.0 に戻すだけで、ユーザーの介入なしで問題なく再生されます。

于 2012-09-21T18:26:53.487 に答える
14

私の場合、これは簡単な解決策でした:
https://stackoverflow.com/a/28011906/4622767
これをコピーしてクロムに貼り付けます:

chrome://flags/#autoplay-policy

私の Web アプリには多くのページのリロードがあるため、ユーザーに毎回ボタンを押すように強制することはできません。しかし、これは内部で使用するためのものなので、ユーザーに強制的にクロムを使用させ、そのオプションを構成することができます。

于 2015-03-02T14:49:36.067 に答える
10

モバイル サファリでは、play() への JavaScript 呼び出しは、ユーザーが開始したクリック イベントと同じコール スタックにある必要があることを知ってい ます。JavaScriptトリガーを使用したクリックのなりすましも機能しません。

私のnexus 7では、JavaScriptがユーザーのクリックによってトリガーされない限り、再生されないことを確認できます。

于 2012-08-31T17:58:34.357 に答える
3

幸いなことに、私が取り組んでいる html5 アプリは Android 4.1 でのみ動作する必要がありますが、クロスプラットフォームを作成しようとしている場合は、これを少し調整する必要があります。ボリュームを 0.0 に設定してから戻すことも、コントロールで自動再生することもできませんでした。ミュートも試しましたが、うまくいきませんでした。次に、デュレーションを設定してごくわずかな量のファイルのみを再生したらどうなるだろうかと考えました。これは、実際に機能するさらに別のハッキングされたスクリプトです。

function myAjaxFunction() {
  clearTimeout(rstTimer); //timer that resets the page to defaults
  var snd=document.getElementById('snd');
  snd.currentTime=snd.duration-.01; //set seek position of audio near end
  snd.play(); //play the last bit of the audio file
  snd.load(); //reload file
  document.getElementById('myDisplay').innerHTML=defaultDisplay;
  var AJAX=new XMLHttpRequest(); //won't work in old versions of IE
  sendValue=document.getElementById('myInput').value;
  AJAX.open('GET', encodeURI('action.php?val='+sendValue+'&fn=find'), true);
  AJAX.send();
  AJAX.onreadystatechange=function() {
    if (AJAX.readyState==4 && AJAX.status==200) {
      document.getElementById('myDisplay').innerHTML=AJAX.responseText;
      if (document.getElementById('err')) { //php returns <div id="err"> if fail
        rstTimer = setTimeout('reset()', 5000); //due to error reset page in 5 seconds
        snd.play(); //play error sound
        document.getElementById('myInput').value=''; //clear the input
      }
    }
  }
}
于 2012-12-21T18:04:16.723 に答える
2

それは私にも起こりました。これが私がこれをハッキングした方法です:

オーディオをautoplayに設定し、ボリュームを に設定しました0。再生する必要がある場合は、load()メソッドを使用すると自動再生されます。これは軽い mp3 ファイルで、1 時間または 2 時間ごとに再生されるので、これで問題なく動作します。

于 2013-06-20T02:55:30.583 に答える