Home > JavaScript | SmartPhone > 【iPhone】Audioを読み込むイベントがどこまで持ちまわせるか

【iPhone】Audioを読み込むイベントがどこまで持ちまわせるか

タイトルがイミフだけどとりあえずメモ。

iPhoneでAudioを読み込み(再生)させるには、 ユーザーによる任意のイベントが必要。

で、この「任意のイベント」がどこまで持ちまわせるか。 どこまでも持っていけるものではないみたい。

var audio = new Audio('hoge.mp3');
$('a.hoge').click(function(){
  audio.play();
});
これは大丈夫。

getJSON のコールバックでplay()

$('a.hoge').click(function(){
  $.getJSON('getjson.php', function(json){
    var audio = new Audio(json.audio_name);
    audio.play();
  });
});
これはたぶんダメ。

getJSONしてきたものをコールバックの外の変数に入れて、setTimeoutでJSONがセットされるのを確認してからplay()

$('a.hoge').click(function(){
  var json;
  $.getJSON('getjson.php', function(data){
     json = data;
  });</p>

<p>setTimeout(function(){
    if(typeof json === 'undefined') setTimeout(arguments.callee, 100);
    else{
      var audio = new Audio(json.audio_name);
      audio.play();
    }
  });
});
これもたぶんダメ。

同期通信でJSON取りに行って、play()

$('a.hoge').click(function(){
  var jsonText = $.ajax({url:'getjson.php',async:false});
  var json = JSON.parse(jsonText.responseText);</p>

<p>var audio = new Audio(json.audio_name);
  audio.play();
});
これもたぶんダメ。

試しに無名関数で囲ってみる

$('a.hoge').click(function(){
  var audio;
  (function(){
    audio = new Audio('hoge.mp3');
    audio.play();
  })();</p>

<p>});
ダメっぽい。

「任意のイベント」(ここではclick)のイベントハンドラのスコープの中で、 且つそのイベント発生後、通信が起こっていない状況じゃないと、 load/play()は出来ないような、そんな気がする。

詳細は時間があるときに検証する。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://unolabo.boo.jp/archives/2011/09/19-audio%e3%82%92%e8%aa%ad%e3%81%bf%e8%be%bc%e3%82%80%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88.html/trackback
Listed below are links to weblogs that reference
【iPhone】Audioを読み込むイベントがどこまで持ちまわせるか from うのらぼ。

Home > JavaScript | SmartPhone > 【iPhone】Audioを読み込むイベントがどこまで持ちまわせるか

Search
Feeds
Meta

Return to page top