2015-09-18 18 views
7

có cách nào để phát hiện xem có gọi số play() trên phần tử video mà không có cử chỉ người dùng không? Trên Android Chrome cảnh báo này được đưa ra:Tính năng phát hiện nếu cử chỉ của người dùng là cần thiết

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

Vì vậy, trên Chrome Android một cử chỉ dùng được yêu cầu để bắt đầu phát lại của một đoạn video, trong khi nó không phải là trên Chrome desktop. Có cách nào để phát hiện hành vi nào tôi sẽ nhận được không?

Tôi muốn có hành vi hơi khác một chút trong ứng dụng của mình tùy thuộc vào việc bạn có cho phép chơi trò chơi theo chương trình hay không.

Tôi đã cố gắng sử dụng Modernizr.videoautoplay, nhưng điều đó sẽ kiểm tra xem thuộc tính autoplay trên phần tử không giống như vậy. Điều này mang lại âm tính giả cho IE11 và Edge.

Chỉnh sửa: đã thêm an example. Video sẽ bắt đầu phát tự động trong Chrome trên máy tính để bàn và IE11 hoặc Edge (với độ trễ 3 giây) trên cửa sổ 8 hoặc 10. Đối với Chrome @ Android, người dùng cần tương tác (nhấp vào nút) và thông báo lỗi trong bảng điều khiển.

+0

bạn có thể đăng ví dụ mã có lỗi đó không? – Patrick

+0

Xin chào @Patrick Tôi đã cập nhật câu hỏi bằng một liên kết đến một ví dụ. Một chút phức tạp của nó (thêm khung hình cho bit video từng chút một) nhưng vấn đề có thể được nhìn thấy – oskbor

+0

Hi @oskbor, bạn có khắc phục được điều này không? – Biswarup

Trả lời

4

Phương thức phát trả về lời hứa có thể được sử dụng để bắt lỗi.

Không phải tất cả các trình duyệt đều theo dõi the specification vì vậy bạn sẽ phải kiểm tra xem những gì được trả lại là lời hứa trước tiên.

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

Tôi nghĩ rằng điều này cần kiểm tra xem 'window.Promise' có tồn tại trước không, nếu không bạn sẽ gặp lỗi tham chiếu trên các trình duyệt không hỗ trợ lời hứa. – JayPea

Các vấn đề liên quan