2013-04-13 32 views
37

Làm cách nào để chúng tôi yêu cầu quyền truy cập máy ảnh/micrô bằng getUserMedia() sau khi bị từ chối một lần?reprompt cho các quyền với getUserMedia() sau khi từ chối ban đầu

Tôi đang làm việc với getUserMedia để truy cập máy ảnh của người dùng và đưa dữ liệu vào canvas. Đó là tất cả các bit hoạt động tốt.

Khi thử nghiệm, tôi bị từ chối một lần. Tại thời điểm này trong Chrome và Firefox, mọi yêu cầu tiếp theo với getUserMedia() mặc định là trạng thái bị từ chối.

Chúng tôi rõ ràng không muốn làm phiền người dùng của chúng tôi bằng cách yêu cầu quyền đối với máy ảnh/micrô trên mỗi lần tải trang sau khi bị từ chối. Điều đó đã đủ khó chịu với api định vị.

Tuy nhiên, phải có cách để yêu cầu lại. Đơn giản vì người dùng nhấn từ chối một lần không có nghĩa là họ muốn từ chối quyền truy cập webcam cho mọi thời điểm.

Tôi đã đọc về thông số kỹ thuật và googling xung quanh một lúc nhưng tôi không tìm thấy bất cứ điều gì rõ ràng về vấn đề này.

Chỉnh sửa: Nghiên cứu sâu hơn, có vẻ như nhấn Deny trong Chrome sẽ thêm trang web hiện tại vào danh sách chặn. Điều này có thể được truy cập theo cách thủ công thông qua chrome: // settings/content. Cuộn đến Media. Quản lý ngoại lệ, xóa (các) trang web bị chặn.

Liên kết tới chrome: // settings/content không hoạt động (trong trường hợp chúng tôi muốn thêm liên kết hữu ích để cho phép mọi người bật lại quyền).

Toàn bộ UX để xử lý các quyền xung quanh getUserMedia stinks. = (

+1

Cảm ơn cho việc này.Tôi không thể nhìn thấy phần Phương tiện khi truy cập trực tiếp thông qua Cài đặt> Hiển thị cài đặt nâng cao, nhưng thông qua chrome: // settings/content – Teknotica

+0

Từ chối các yêu cầu tiếp theo sau khi bị từ chối một lần, đó là hành vi của Chrome chứ không phải Firefox. Chỉ khi bạn chọn "Luôn từ chối" trong danh sách thả xuống trên trang web https thì điều đó xảy ra trong Firefox. – jib

+1

Trong Chrome, người dùng có thể nhấp vào biểu tượng máy ảnh trong thanh url để hoàn tác một khối trước đó hoặc quản lý danh sách chặn. Không cần phải gây rối với chrome: // links – jib

Trả lời

13

Sử dụng HTTPS. Khi người dùng cấp quyền một lần, nó được nhớ và Chrome không yêu cầu quyền truy cập lại trang đó và bạn sẽ có quyền truy cập vào phương tiện ngay lập tức. Điều này không cung cấp cho bạn cách để buộc thanh quyền trên người dùng một lần nữa, nhưng ít nhất chắc chắn rằng bạn không cần phải tiếp tục yêu cầu nó khi người dùng cấp quyền đó một lần

Nếu ứng dụng của bạn đang chạy từ SSL (https: //), quyền này sẽ Đó là, người dùng sẽ không phải cấp/từ chối quyền truy cập mỗi lần.

Xem: http://www.html5rocks.com/en/tutorials/getusermedia/intro/

+1

HTTP trên Firefox sẽ không duy trì quyền này. –

+1

Điều này hiện đang hoạt động trong firefox, nhưng tùy chọn "Luôn luôn Chia sẻ" bị ẩn một chút dưới mũi tên thả xuống. – xdumaine

+0

"Luôn chia sẻ" bị ẩn một chút trong Firefox theo cách tương tự "Luôn từ chối". Vấn đề của OP không xảy ra trong Firefox. – jib

10

Câu trả lời của jeffreyveon sẽ giúp giảm cơ hội người dùng của bạn sẽ chọn từ chối vì cô ấy sẽ chỉ phải chọn một lần.

Trong trường hợp cô ấy nhấp vào từ chối, bạn có thể cung cấp thông báo giải thích lý do bạn cần sự cho phép và cách cập nhật lựa chọn của mình. Ví dụ:

navigator.getUserMedia (
    // constraints 
    { 
     video: true, 
     audio: true 
    }, 

    // successCallback 
    function(localMediaStream) { 
     var video = document.querySelector('video'); 
     video.src = window.URL.createObjectURL(localMediaStream); 
     video.onloadedmetadata = function(e) { 
     // Do something with the video here. 
     }; 
    }, 

    // errorCallback 
    function(err) { 
    if(err === PERMISSION_DENIED) { 
     // Explain why you need permission and how to update the permission setting 
    } 
    } 
); 
+0

Tôi có thể tránh cho phép nhấp vào quyền truy cập máy ảnh khi tải trang hay không. Nó có thể được kiểm soát bằng cách sử dụng JavaScript –

+0

Không, bạn không thể, và may mắn thay !!! Nó sẽ cho phép các trang web, ứng dụng và bất cứ điều gì để truy cập các thiết bị truyền thông của mọi người mà không có sự đồng ý của họ, đó sẽ là một hiếp dâm riêng tư ... –

0

Có vẻ như mọi thứ đã sáng lên sáng nay. Chrome kể từ phiên bản 46.0.2490.71 m không còn yêu cầu tôi liên tục cho phép từ máy chủ cục bộ nữa.

0

Hãy lưu ý các điểm dưới đây.

1. Localhost: In Localhost Chrome Browser asking permission only one time and Firefox every pageload.

2. HTTPS: Both Browsers Chrome and Firefox asking permission only one time.