2011-11-18 7 views
15

私はクライアントのチャットを行っているウェブサイトで作業していますが、iPad(iOS 5)のオーディオに問題があります。iPadで音声を再生する

ターゲットは実際にはIE7をサポートするiPadが好ましいです。

私はこれらのアプローチを試してみた:いくつかのjavascript

var el = document.getElementById('notification'); 
el.play(); 

HTML5

<audio id="notification" preload="auto"> 
    <source src="audio/notification.ogg" type="audio/ogg" /> 
    <source src="audio/notification.mp3" type="audio/mpeg" /> 
</audio> 

一部javascript関数は、私がどこかにいる実際に盗みました1つの機能において2つの異なる方法である。スクリプトがサブディレクトリにあるので、パスが正しいことに注意してください。

function notify() { 
    var url = '../audio/notification.mp3'; 
    var a = document.createElement('audio'); 

    if(!!(a.canPlayType && a.canPlayType('audio/mpeg').replace(/no/, ''))) { 
     var sound = new Audio(url); 
     sound.load(); 
     sound.play(); 
    } else { 
     $('#notification').remove(); 
     var sound = $('<embed id="notification" type="audio/mpeg" src="'+url+'" loop="false" hidden="true" autostart="true" />'); 
     $(body).append(sound); 
    } 
} 

どちらの方法も機能していないようです。私は何か間違っているのですか?

答えて

25

まあ、答えはやや明白でした。 (iPadのを含むすべてのデバイス用)、どこユーザー月のiOS上のSafariで

を:時間の支出の多くは、研究などを行った後、私は言ってサファリの公式ドキュメントでan article

を見つけましたセルラーネットワーク上にあり、データ単位ごとに課金され、プリロードおよび自動再生は無効になります。ユーザーが開始するまでデータはロードされません。つまり、play()メソッドまたはload()メソッドがユーザーアクションによってトリガーされない限り、JavaScript play()およびload()メソッドもユーザーが再生を開始するまで非アクティブです。つまり、ユーザーが開始した再生ボタンは機能しますが、onLoad = "play()"イベントは実行されません。

基本的に、ユーザーが最初にトリガーすることなくサウンドを起動することはできません。解決策として、デフォルトでオフになっているミュートボタンが作成されたので、通知音を鳴らすためにそれをクリックする必要があります。その後、私はJavascriptを使ってユーザーの介入なしにサウンドを再生することができます。

この素晴らしい将来のためにSafariに感謝します。どうもありがとう。

+1

面白いもの! –

+4

ガー、アップルに来て、ユーザーアクションはWebページを読み込んでいるので、* 2つの*ユーザーアクションが必要です(ページを読み込んでから別のことをする)。ネイティブキーボードをトリガーしようとすると同じ問題が発生します。 –

+0

@Tim S:あるWebページでは、ユーザーがページを読み込んだら、そのページで好きなときにいつでも音声を再生できる再生ボタンをクリックすると、例えば、mouseoverイベントに応答して? –

-1

MP3を2番目のソースではなく最初のソースとして配置してみてください。 iPadは何を問わず常に最初のソースを演奏していた問題を抱えていました(これは今でも修正されているかもしれませんが、試してみる価値があります)。

typeaudio/mp3に変更してみてください。

+0

残念ながら、両方とも機能しませんでした。あなたの答えをありがとう。 –

+0

Odd。デスクトップブラウザで動作することを確認しましたか?したがって、オーディオファイルへのパスが正しいことを確認できますか? –

+1

私はそれがデスクトップ上で動作したことを確かめることができます。また、iPadの場合は、実際には、ハハの音! –

4

Apple iPadは、以前にユーザーがクリックしていない状態でサウンドを再生することはできません。

解決方法:再生/一時停止ボタンを追加してください。

App.toggle_audio = function(elem) { 
    var icon = elem.find("i"); 
    var playing = _.include(icon.attr('class').split(" "), "icon-pause") 
    if (playing) { 
    elem.html("<i class='icon-play'></i> " + App.translate_play_audio); 
    App.play_audio_toggle = false; 
    } else { 
    App.audio_file.load(); 
    elem.html("<i class='icon-pause'></i> " + App.translate_pause_audio); 
    App.play_audio_toggle = true; 
    } 
} 

オーディオがロードされると、ユーザーがボタンをクリックすると、その後、Javascriptで再生することができます。

+7

私はこの問題を遭遇し、それを解決する方法を見つけました。その後、私が他人を助けるために使うコードを投稿することに決めました。 – Hendrik

6

iPad用のiOS 6のリリースでは、onLoadでのオーディオ再生はまだiPadではサポートされていません。

iOS 6搭載のiPhoneの場合、オーディオはiPhoneのオーディオジャックにヘッドフォンが接続されている場合のみ、htmlサイトのonLoadで再生されます。

+1

OMG真剣に、LOL。 – Aaron

関連する問題