2015-09-18 11 views
7

Gibt es eine Möglichkeit zu erkennen, ob der Aufruf play() auf einem Videoelement ohne eine Benutzergeste erlaubt ist? Auf Android Chrome wird diese Warnung gegeben:Feature erkennen, ob Benutzergeste benötigt wird

Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.

So auf Chrome Android eine Benutzergeste erforderlich ist, um die Wiedergabe eines Videos zu starten, während es nicht auf Desktop-Chrome ist. Gibt es eine Möglichkeit zu erkennen, welches Verhalten ich bekommen werde?

Ich möchte ein etwas anderes Verhalten in meiner App haben, abhängig davon, ob ein programmatisches Anrufen erlaubt ist oder nicht.

Ich habe versucht, Modernizr.videoautoplay zu verwenden, aber das überprüft, ob die autoplay Eigenschaft auf dem Element, das ist nicht die gleiche Sache. Dies ergibt falsche negative Ergebnisse für IE11 und Edge.

Bearbeiten: hinzugefügt an example. Das Video wird automatisch in Chrome Desktop und IE11 oder Edge (mit 3s Verzögerung) auf Windows 8 oder 10 abgespielt. Für Chrome @ Android ist eine Benutzerinteraktion erforderlich (klicken Sie auf die Schaltfläche) und die Fehlermeldung wird in der Konsole angezeigt.

+0

Können Sie ein Codebeispiel mit diesem Fehler posten? – Patrick

+0

Hallo @Patrick Ich habe die Frage mit einem Link zu einem Beispiel aktualisiert. Es ist ein wenig komplex (Frames zum Video Stück für Stück hinzufügen), aber das Problem kann gesehen werden – oskbor

+0

Hallo @oskbor, haben Sie eine Lösung dafür bekommen? – Biswarup

Antwort

4

Die Wiedergabemethode gibt ein Versprechen zurück, mit dem der Fehler behoben werden kann.

Nicht alle Browser folgen the specification, so dass Sie zuerst überprüfen müssen, ob das, was zurückgegeben wird, ein Versprechen ist.

var autoPlayAllowed = true; 
var promise = document.createElement("video").play(); 
if(promise instanceof Promise) { 
    promise.catch(function(error) { 
     // Check if it is the right error 
     if(error.name == "NotAllowedError") { 
      autoPlayAllowed = false; 
     } else { 
      throw error; 
     } 
    }).then(function() { 
     if(autoPlayAllowed) { 
      // Allowed 
     } else { 
      // Not allowed 
     } 
    }); 
} else { 
    // Unknown if allowed 
} 
+1

Ich denke, das muss überprüft werden, ob 'window.Promise' zuerst existiert, sonst erhalten Sie einen Referenzfehler auf Browsern, die Versprechen nicht unterstützen. – JayPea

Verwandte Themen