HTML5-Audioobjekt wird auf dem iPad nicht abgespielt (wenn es von einem setTimeout aufgerufen wird)

Ich habe eine Seite mit einem versteckten<audio> Objekt, das über eine benutzerdefinierte Schaltfläche per Javascript gestartet und gestoppt wird. (Der Grund dafür ist, dass ich die Schaltfläche anpassen möchte und das Zeichnen eines Audioplayers die Renderleistung auf dem iPad sowieso zu zerstören scheint.) Ein vereinfachtes Beispiel (in Coffeescript):

// 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

Das Audio wird einwandfrei wiedergegeben, wenn es von einer an a gebundenen Funktion ausgelöst wirdclick Ich möchte jedoch, dass eine Animation abgeschlossen wird, bevor die Datei abgespielt wird.play() in einemsetTimeout. Allerdings kann ich das einfach nicht zum Laufen bringen:

// 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

Ich habe das überprüft@_audio (this._audio) liegt im Geltungsbereich und das ist esplay() Methode existiert. Warum funktioniert das nicht auf dem iPad?

Bearbeiten: Wie es passiert, ist der obige vereinfachte Testfall tatsächlichtut Arbeit. Siehe @apsillers Antwort unten und meine Kommentare dazu.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage