2013-04-13 8 views
37

W jaki sposób uzyskujemy żądanie dostępu do kamery/mikrofonu za pomocą getUserMedia() po odmowie jeden raz?reprompt dla uprawnień z getUserMedia() po początkowym odrzuceniu

Pracuję z getUserMedia, aby uzyskać dostęp do kamery użytkownika i przesłać dane do płótna. Ten kawałek działa dobrze.

Podczas testowania raz uderzyłem odmowę. W tym momencie w przeglądarce Chrome i Firefox wszelkie kolejne żądania z getUserMedia() są domyślnie odrzucane.

Oczywiście nie chcemy denerwować naszych użytkowników, żądając uprawnień do kamery/mikrofonu przy każdym wczytaniu strony po odmowie. To już dość denerwujące z interfejsem geolokalizacyjnym.

Jednak musi istnieć sposób na żądanie go ponownie. Po prostu dlatego, że użytkownik raz odmówił, nie oznacza, że ​​chce odmówić dostępu do kamery przez cały czas.

Czytałem o specyfikacji i googlełem przez jakiś czas, ale nie znajduję nic jawnie na temat tego problemu.

Edytuj: Edycja: Dalsze badania, wydaje się, że trafienie Odmów w Chrome dodaje bieżącą witrynę do listy bloków. Można to zrobić ręcznie za pomocą chrome: // settings/content. Przewiń do Media. Zarządzaj wyjątkami, usuń zablokowane witryny.

Łączenie z chrome: // ustawienia/zawartość nie działa (w przypadku, gdy chcemy dodać pomocny link, aby umożliwić ponownym włączeniem uprawnień).

Cały UX do obsługi uprawnień związanych z getUserMedia śmierdzi. = (

+1

Dzięki za to.Nie widziałem sekcji Media, przechodząc bezpośrednio przez Ustawienia> Pokaż ustawienia zaawansowane, ale przez chrome: // settings/content – Teknotica

+0

Odmawianie kolejnych żądań po uderzeniu od razu, to zachowanie Chrome, a nie Firefox. Tylko jeśli wybierzesz "Zawsze odmawiaj" w menu rozwijanym https, dzieje się to w Firefoksie. – jib

+1

W przeglądarce Chrome użytkownicy mogą kliknąć ikonę kamery na pasku adresu, aby cofnąć poprzedni blok lub zarządzać listą bloków. Nie musisz zadzierać z chrome: // links – jib

Odpowiedz

13

Użyj HTTPS Gdy użytkownik raz wyrazi zgodę, zostanie zapamiętany, a Chrome ponownie nie poprosi o zgodę na tę stronę i natychmiast uzyskasz dostęp do multimediów. Nie zapewnia to sposobu wymuszenia paska uprawnień na użytkownika, ale przynajmniej upewnia się, że nie musisz pytać o to, gdy użytkownik udzieli pozwolenia tylko raz.

Jeśli twoja aplikacja działa z SSL (https: //), to pozwolenie być stałym, tzn. użytkownicy nie będą musieli przyznawać dostępu/odmawiać dostępu za każdym razem.

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

+1

HTTPs w Firefoksie nie utrwalą tego pozwolenia. –

+1

To działa teraz w firefoxie, ale opcja "Zawsze udostępniaj" jest nieco ukryta pod strzałką rozwijaną. – xdumaine

+0

"Zawsze udostępniaj" jest nieco ukryte w Firefoksie w ten sam sposób, co "Zawsze odmawiaj". Problem OP nie występuje w Firefoksie. – jib

10

Odpowiedź jeffreyveon pomoże zmniejszyć prawdopodobieństwo, że użytkownik wybierze odmowę, ponieważ będzie musiała wybrać tylko jeden raz.

Jeśli kliknie przycisk odmowa, możesz podać komunikat wyjaśniający, dlaczego potrzebujesz pozwolenia i jak zmienić swój wybór. Na przykład:

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

Czy mogę uniknąć kliknięcia zezwalaj na dostęp do kamery po załadowaniu strony. Czy można go kontrolować za pomocą JavaScriptu –

+0

Nie, nie możesz i na szczęście !!! Umożliwiłoby to stronom internetowym, aplikacjom i tym podobnym dostęp do urządzeń medialnych ludzi bez ich zgody, co byłoby naruszeniem prywatności ... –

0

Wygląda na rozjaśniony dziś rano. Chrome od wersji 46.0.2490.71 m nie prosi mnie już dłużej o uprawnienia z localhost.

0

Należy pamiętać o poniższych punktach.

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.