2016-08-25 31 views
6

Obecnie pracuję nad pracownikiem serwisu obsługującym powiadomienia push w przeglądarce. Obecnie mam ten błąd "rejestracja błędu nie powiodła się". Czy ktoś może pomóc w tym problemie? Sprawdzić client1.html i service-worker.js pliku poniżej:Rejestracja pracownika serwisowego nie powiodła się

BŁĄD:

SW registration failed with error SecurityError: Failed to register a ServiceWorker: The URL protocol of the current origin ('null') is not supported.

usługi worker.js

console.log('Started', self); 
self.addEventListener('install', function(event) { 
    self.skipWaiting(); 
    console.log('Installed', event); 
}); 
self.addEventListener('activate', function(event) { 
console.log('Activated', event); 
}); 
self.addEventListener('push', function(event) { 
    console.log('Push message received', event); 
}); 

client1.html

<!doctype html> 
    <html> 
    <head> 
    <title>Client 1</title> 
    </head> 
    <body> 
    <script> 
    if('serviceWorker' in navigator){ 
     // Register service worker 
     navigator.serviceWorker.register('service-worker.js').then(function(reg){ 
      console.log("SW registration succeeded. Scope is "+reg.scope); 
     }).catch(function(err){ 
      console.error("SW registration failed with error "+err); 
     }); 
    } 
    </script> 
    </body> 
    </html> 
+0

Pierwszy argument do "ServiceWorkerContainer.register" to adres URL. Komunikat o błędzie oznacza, że ​​przeglądarka odmawia użycia zasobu, ponieważ jego pochodzenie ma wartość null - co często zdarza się w przypadku zasobów lokalnych (file: //). 'service-worker.js' jest lokalny - Założę się, że właśnie dlatego otrzymujesz problem dotyczący źródła pochodzenia krzyżowego – Tibrogargan

+0

Dziękuję Właśnie rozwiązałem problem, umieszczając mój folder wewnątrz localhost –

+0

Nie widzę żadnego odniesienia do Pusher w kodzie. Dlaczego to pytanie ma tag ['pusher'] (http://stackoverflow.com/questions/tagged/pusher)? –

Odpowiedz

11

Rozwiązane: Pierwszą rzeczą jest to, że pracownik usług pracuje tylko w trybie bezpiecznym w https lub localhost. Nie działa w lokalnych zasobach, takich jak file: // lub http.

i druga kwestia była podczas rejestracji.

 navigator.serviceWorkerContainer.register('service-worker.js').then(function(reg){ 
+0

https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features Zgodnie z tym dokumentem, należy go obsługiwać: "Bezpieczne pochodzenie" to pochodzenie które pasują do co najmniej jednego z następujących wzorów (schemat, host, port): (https, *, *) (wss, *, *) (*, localhost, *) (*, 127/8, *) (*, :: 1/128, *) (plik, *, -) (rozszerzenie chrome, *, -) –