- 2011-09-19 (月) 16:39
- JavaScript | SmartPhone
タイトルがイミフだけどとりあえずメモ。
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
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 うのらぼ。