Tengo una página con un objeto <audio>
oculto que se inicia y detiene utilizando un botón personalizado a través de javascript. (La razón es que quiero personalizar el botón, y que dibujar un reproductor de audio parece destruir el rendimiento de renderizado en el iPad de todos modos). Un ejemplo simplificado (en CoffeeScript):El objeto de audio HTML5 no se reproduce en el iPad (cuando se llama desde un setTimeout)
// Works fine on all browsers
constructor: (@_button, @_audio) ->
@_button.on 'click', @_play // Bind button's click event with jQuery
_play: (e) =>
@_audio[0].play() // Call play() on audio element
El audio se reproduce bien cuando se activa desde una función ligada a un evento click
, pero en realidad me gustaría añadir una animación para completar antes de que el archivo se reproduce por lo que poner .play()
dentro de un setTimeout
. Sin embargo yo no puedo conseguir que esto funcione:
// Will not play on iPad
constructor: (@_button, @_audio) ->
@_button.on 'click', @_play // Bind button's click event with jQuery
_play: (e) =>
setTimeout (=> // Declare a 300ms timeout
@_audio[0].play() // Call play() on audio element
), 300
He comprobado que @_audio
(this._audio
) es en su alcance y que existe su método play()
. ¿Por qué esto no funciona en el iPad?
Editar: Si llega el caso, el caso de prueba simplificada anterior realidad hace trabajo. Vea la respuesta de @apsillers a continuación y mis comentarios al respecto.
Solo para añadir He probado esto en el simulador _y_ un iPad real. –
Supongo que no se puede reproducir un video/audio en iPad/iPhone sin una acción explícita del usuario ... para el consumo de ancho de banda – fcalderan
Además, he puesto un 'try/catch' alrededor del método de reproducción y no hay parece ser un error lanzado. –