2011-11-18 21 views
15

Sto lavorando su un sito Web che ha una chat per un client, tuttavia, stiamo riscontrando problemi con l'audio in iPad (iOS 5).Riproduzione audio su iPad

L'obiettivo è in realtà l'iPad con supporto per IE7 è preferito.

ho provato questi approcci:

HTML5

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

Con alcuni javascript

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

javascript Alcune funzioni ho rubato da qualche parte che in realtà sono due metodi diversi in una funzione. Si prega di notare che lo script è in una sottodirectory, quindi il percorso è corretto.

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); 
    } 
} 

Entrambi i metodi non sembrano funzionare. Sto facendo qualcosa di sbagliato?

risposta

25

Bene, la risposta era piuttosto ovvia.

Dopo un sacco di passare il tempo a fare ricerca, ecc, ho trovato an article nella documentazione ufficiale di Safari dicendo:

In Safari su iOS (per tutti i dispositivi, compresi iPad), dove l'utente può essere su una rete cellulare e essere addebitato per unità di dati, il precaricamento e la riproduzione automatica sono disabilitati. Nessun dato viene caricato fino all'avvio dell'utente. Ciò significa che i metodi JavaScript play() e load() sono anche inattivi fino a quando l'utente inizia la riproduzione, a meno che il metodo play() o load() non sia attivato dall'azione dell'utente. In altre parole, un pulsante Riproduci avviato dall'utente funziona, ma un evento onLoad = "play()" no.

Quindi, in sostanza, non è possibile avviare un suono senza che l'utente lo abbia inizialmente attivato. Come soluzione, ho creato un pulsante di disattivazione audio disattivato per impostazione predefinita, quindi devi fare clic su di esso che riproduce il suono della notifica. Successivamente, posso usare Javascript per riprodurre il suono senza l'interazione dell'utente.

Grazie Safari per questo fantastico futuro. Molte grazie.

+1

Cose interessanti! –

+4

Gah, vieni su Apple, l'azione dell'utente sta caricando la pagina web, in modo da * sono obbligatori due * le azioni dell'utente (caricamento di una pagina, poi fare qualcos'altro). Lo stesso problema con il tentativo di attivare la tastiera nativa. –

+0

@ Tim S: Stai dicendo che, per una data pagina web: una volta che l'utente carica la pagina, quindi fa clic sul pulsante play che si potrebbe poi riprodurre l'audio in qualsiasi momento su quella pagina? dì, in risposta a un evento mouseover? –

-1

Provare a mettere l'MP3 come prima fonte piuttosto che la seconda. L'iPad aveva un problema in cui ha sempre giocato la prima fonte, non importa cosa (potrebbe essere stato risolto a questo punto, ma vale la pena provarlo).

Provare anche a modificare type in audio/mp3.

+0

Purtroppo, entrambi non ha funzionato. Grazie per la tua risposta però. –

+0

Dispari. Hai verificato che funzioni su un browser desktop? Quindi puoi assicurarti che i percorsi dei file audio siano corretti? –

+1

Posso certamente confermare che ha funzionato sul desktop. Inoltre, il suono se l'iPad è effettivamente acceso, ahah! –

4

L'Apple iPad non consente di riprodurre suoni senza un clic dell'utente che lo ha avviato in precedenza.

Soluzione: aggiungere un pulsante di riproduzione/pausa.

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; 
    } 
} 

Una volta che l'utente ha fatto clic sul pulsante una volta caricato l'audio. Puoi quindi giocare via Javascript.

if (App.play_audio_toggle) { 
    App.audio_file.play(); 
    } 
+7

Mi sono imbattuto in questo problema e ho trovato un modo per risolverlo. Quindi ho deciso di pubblicare il codice che uso per aiutare gli altri. – Hendrik

6

Con il rilascio di iOS 6 per iPad la riproduzione audio durante un onLoad non è ancora supportata per iPad.

Per iPhone con iOS 6 audio viene riprodotto solo durante onLoad di un sito HTML se ci sono le cuffie collegate al jack audio su iPhone.

+1

OMG sul serio, LOL. – Aaron

Problemi correlati