2013-01-24 7 views
8

Mam modalne okno dialogowe w mojej aplikacji, które używa getUserMedia do wyświetlania wideo z kamery użytkownika. Spowoduje to wyświetlenie paska "Zablokuj/Zezwalaj". Załóżmy, że użytkownik zamyka okno dialogowe przed kliknięciem "Odrzuć" lub "Zezwól". Pasek pozostaje, mimo że elementy, które będą go używać zniknęły.Anulowanie żądania getUserMedia

Czy istnieje sposób powiadomienia przeglądarki, że może ukryć prośbę o pozwolenie, mimo że użytkownik nigdy z nią nie współpracował?

+0

Nie, i istnieją ku temu powody bezpieczeństwa. Przeglądarka będzie pytać za każdym razem, gdy domena spróbuje uzyskać do niej dostęp, jeśli domena nie znajduje się jeszcze na liście dozwolonych/zabronionych. –

+0

Zauważyłem, że moje pytanie było źle sformułowane. Brzmiało to tak, jakbym pytał o coś innego niż to, o co naprawdę pytałem. Mam nadzieję, że moja edycja wystarczająco wyjaśniła pytanie. –

+0

Mam nadzieję, że nie masz nic przeciwko, ale zredukowaliśmy to pytanie do prostszej formy w nadziei, że ktoś jest bardziej prawdopodobne, że odpowie. Twój problem z obsługą wielu żądań można rozwiązać, używając zmiennych o większym zasięgu, na przykład globalnego obiektu strumieniowego i funkcji globalnej, która jest wywoływana, gdy przyznany jest dostęp. Wtedy nie ma znaczenia, które wywołanie zwrotne zostanie wywołane, ponieważ oba będą miały taki sam efekt. – Dave

Odpowiedz

-4

Myślę, że chcesz coś takiego:

$("body").on('click', "#stop_button", function(e) { 
     e.preventDefault(); 
     mediaStream.stop(); 
    }); 

MediaStream moja zmienna globalna, która została zdefiniowana gdy zadzwoniłem getUserMedia

 navigator.getUserMedia(
      { 
       video: true, 
       audio: false 
      }, 
      function(stream) { 
       if (navigator.mozGetUserMedia) { 
       video.mozSrcObject = stream; 
       } else { 
       var url = window.URL || window.webkitURL; 
       video.src = url ? url.createObjectURL(stream) : stream; 
       } 
       mediaStream = stream; 
       video.play(); 
      }, 
      function(error) { 
       console.log("ERROR: " + error); 
      } 
     ); 

Tak w przykładzie, można nazwać stop() na strumień multimediów po zamknięciu okna dialogowego - należy utworzyć obsługę zdarzeń dla tego.

Zapoznaj się z tym Tutorial on getUserMedia, aby uzyskać pełny przykład pracy i wersję demonstracyjną na żywo.

+3

Nie mam komputera do przetestowania, ale uważam, że to nie spowoduje, że baner uprawnień zniknie, jeśli użytkownik jeszcze nie zezwolił/nie zaprzeczył. Przynajmniej tak było, kiedy próbowałem to kilka miesięcy temu. – Dave

2

Gdy użytkownik zamyka swoje okno, odświeżyć stronę, aby wyczyścić prośbę o pozwolenie z:

location.reload(); 

Przetestowałem to w Firefoksie i Chrome 41 (Canary) i tam pracuje.

Zastrzeżenie: Chrome 39 (obecna wersja tego pisma) wydaje się mieć błąd, który nie działa tak dobrze. Po pierwszym przejściu do strony nie będzie działać, ale po odświeżeniu strony ręcznie raz, zacznie działać.

Zdaję sobie sprawę, że ta odpowiedź może nie być natychmiast przydatna, ale po wysłaniu Chrome 41 powinna działać.

Obecnie nie ma sposobu na usunięcie pytania o pozwolenie bez ponownego ładowania strony.