2012-12-05 13 views
17

Próbuję odtwarzać z navigator.getUserMedia w przeglądarce Chrome; jednak nie żąda uprawnień, gdy jest serwowany lokalnie (file: ///whatever/index.html), ale robi to na JSFiddle (http://jsfiddle.net/EBsvq/) i innych witrynach.Chrome getUserMedia Nie wymaga uprawnień Lokalnie

Czy ktoś wie, dlaczego? Czy muszę jakoś zresetować moje uprawnienia?

Oto co używam lokalnie:

<html> 
<head></head> 
<body> 
    <button id="btn">Start</button> 

<script type="text/javascript"> 
    /*! jQuery v1.8.3 jquery.com | jquery.org/license */ 
    //JQuery goes here 
</script> 

<script type="text/javascript"> 
    navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.getUserMedia; 

    $(function(){ 
    $('#btn').click(function(){ 
     navigator.getUserMedia({audio: true}, 
     function(){ 
     alert('success'); 
     }, 
     function (err) { 
     alert('fail: ' + JSON.stringify(err)); 
     }); }); }); 
     </script> 
    </body> 
</html> 

Odpowiedz

19

Chrome bloki dużo rzeczy na file:/// URI bez zgłaszania błędów zabezpieczeń (np Geolocation.). Najlepszym wyjściem jest uruchomienie z lokalnego serwera WWW, jeśli masz zainstalowany Python spróbuj SimpleHTTPServer.

+8

To jest poprawne: getUserMedia działa tylko wtedy, gdy jest uruchamiany z pliku na serwerze. Nie będzie działać z adresu URL pliku: //. Otrzymasz błąd "PERMISSION_DENIED: 1", ale to nie jest zbyt intuicyjne! –

+0

@SamDutton: Zgłosiłem zgłoszenie błędu z prośbą o bardziej intuicyjny komunikat o błędzie: https://code.google.com/p/chromium/issues/detail?id=257104 – Gili

+0

@Gili: oznaczono gwiazdką! –

14

Możesz użyć flagi --allow-file-access-from-files z wiersza poleceń podczas otwierania chrome, aby móc używać getUserMedia z lokalnego systemu plików.

+0

Znacznie szybciej niż konfiguracja serwera WWW do prostego testu – MikeMurko

+0

Próbowałem, ale nie wydawało mi się pracować. Używam wersji Chrome 48.0.2564.116 m. – Moon

0

To trochę nietrywialne jak zrobić argumentu wiersza poleceń w OS X. Będzie to zwykle wygląda tak

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --allow-file-access-from-files 

Jeśli jesteś maniakiem jak ja, i umieścić swoje aplikacje w ~/Applications, a następnie będzie

"/Users/yougohere/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --allow-file-access-from-files 

Jeżeli żadna z tych pracują, a następnie wpisz chrome://version w pasku adresu Chrome, i powie to, co „wiersz polecenia” inwokacja należy używać. Po prostu dodaj do tego --allow-file-access-from-files.

0

spróbuj zainstalować prosty serwer (waga lekka), jednym kliknięciem zainstalować, można pobrać here

Po jego zainstalowaniu można znaleźć aplikację do strony, którą chcesz uruchomić.

1

Napotkałem podobny problem, ale związany z dostępem do mikrofonu. Chrome blokuje dostęp do urządzenia, jeśli wyświetlasz plik za pomocą pliku: // (zauważ, że w Microsoft Edge i Firefox działał on przez plik :: //).

Jedno rozwiązanie Znalazłem dla Chrome:

  1. otwarty chrom typ w chromie URL: // wersja/
  2. skopiuj wartość pola "Command Line" w linii poleceń i dołączyć - odłóż plik i uzyskaj dostęp do niego po otwarciu pliku. Po otwarciu przeglądarki Chrome i wprowadzeniu pliku: // url, uruchom go pod numerem
  3. .

Aby uruchomić Chrome zawsze tak, kliknij prawym przyciskiem ikonę Chrome, a następnie kliknij właściwości. W zakładce Skrót dopisz do wartości docelowej wszystkie parametry linii poleceń z 2.

+0

To działało na Chrome 50.0.2661.102! –

Powiązane problemy