2015-09-18 19 views
7

czy istnieje sposób na wykrycie, czy wywołanie play() na elemencie wideo jest dozwolone bez gestu użytkownika? Na Android Chrome to jest ostrzeżenie:Funkcja wykrywa, czy gest użytkownika jest potrzebny

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

Więc na Chrome Android jest wymagane gest użytkownika, aby rozpocząć odtwarzanie wideo, podczas gdy nie jest na pulpicie Chrome. Czy istnieje sposób na wykrycie, które zachowanie otrzymam?

Chcę mieć nieco inne zachowanie w mojej aplikacji, w zależności od tego, czy dozwolone jest wywoływanie programów w programach.

Próbowałem użyć Modernizr.videoautoplay, ale to sprawdza, czy właściwość autoplay na elemencie, co nie jest tym samym. Daje to fałszywe negatywy dla IE11 i Edge.

Edytuj: dodano an example. Film rozpocznie się automatycznie na pulpicie Chrome i IE11 lub Edge (z opóźnieniem 3 s) w systemie Windows 8 lub 10. W przeglądarce Chrome @ Android wymagana jest interakcja użytkownika (kliknięcie przycisku), a komunikat o błędzie można zobaczyć w konsoli.

+0

Czy możesz wysłać przykład kodu z tym błędem? – Patrick

+0

Witam @Patrick Mam zaktualizowane pytanie z linkiem do przykładu. Jest to nieco skomplikowane (dodawanie klatek do wideo bit po bicie), ale problem można zobaczyć: – oskbor

+0

Witam @oskbor, czy otrzymałeś poprawkę? – Biswarup

Odpowiedz

4

Metoda odtwarzania zwraca obietnicę, która może zostać wykorzystana do złapania błędu.

Nie wszystkie przeglądarki są zgodne z the specification, więc musisz sprawdzić, czy to, co jest zwracane, jest pierwszą obietnicą.

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

Myślę, że to musi sprawdzić, czy 'window.Promise' istnieje po raz pierwszy, w przeciwnym razie dostaniesz błąd odniesienia w przeglądarkach, które nie obsługują obietnic. – JayPea

Powiązane problemy