2016-12-29 35 views
10

Kiedy próbuję dodać pracownika serwisu na mojej stronie internetowej progresywnej strony, dlaczego w konsoli przeglądarki występuje następujący błąd?Dlaczego widzę komunikat "Błąd - dozwolony jest tylko bezpieczny początek" dla mojego pracownika serwisu?

ERROR "Uncaught (in promise) DOMException: Only secure origins are allowed 

kod JS:

(function() { 
    'use strict'; 

    // TODO add service worker code here 
    if ('serviceWorker' in navigator) { 
     navigator.serviceWorker 
      .register('service-worker.js') 
      .then(function() { 
       console.log('Service Worker Registered'); 
      }); 
    } 
})(); 

Odpowiedz

13

Od Service Worker FAQ:

Q: Otrzymuję komunikat o "Tylko bezpieczne początki są dozwolone". Czemu?

A: pracownicy serwisu są dostępne tylko dla „zabezpieczyć pochodzenie” (HTTPS miejsc, w zasadzie) zgodnie z polityką preferują bezpieczne początki dla nowych funkcji. Jednak http://localhost jest również uważane za bezpieczne pochodzenie, więc jeśli możesz, rozwój na localhost jest łatwym sposobem na uniknięcie tego błędu.

Można również użyć flagi wiersza polecenia --unsafely-treat-insecure-origin-as-secure. Ta flaga musi być połączona z flagą --user-data-dir. Na przykład:

$ ./chrome --user-data-dir=/tmp/foo --unsafely-treat-insecure-origin-as-secure=http://your.insecure.site 

Jeśli chcesz przetestować na https://localhost z certyfikatu z podpisem własnym, należy:

$ ./chrome --allow-insecure-localhost https://localhost 

Można również znaleźć flagę --ignore-certificate-errors użyteczne.

+7

Opcja localhost jest źle wdrożone. Powinno to sprawdzić wszystko, co zostanie rozwiązane na 127.0.0.1, a nie na nazwę hosta. Powinienem móc użyć 'local.example.com', jeśli wskazuje on 127.0.0.1, podobnie jak wszystkie inne moje strony programistyczne. – colan

+0

Gdzie mogę uruchomić wszystkie te flagi? Wygląda na to, że przekazujesz flagi podczas instalowania chromu na platformie * nix. Jeśli tak, to co z użytkownikami systemu Windows? – samayo

+0

Czy mogę dodać wyjątek bezpośrednio w przeglądarce lub config gdzieś. Zamiast uruchamiać go w ten sposób. –

0

Można sprawdzić protokół przed zarejestrowaniem pracownik usług tak, location.protocol === 'https:' && serviceWorker.register('service-worker.js')