2016-02-12 29 views
6

Katalogi MY są następujące.Jak zarejestrować zakres pracownika serwisu jeden katalog powyżej, gdzie znajduje się plik service_worker.js

public_html/ 
sw/ 

z „sw /”, gdzie chcę umieścić wszystkich pracowników obsługi, ale wtedy te pracowników usług z zakresu wszystkich plików w „public_html /”.

JS

<script> 
if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('sw/notifications.js', { scope: '../sw/' }).then(function(reg) { 
    // registration worked 
    console.log('Registration succeeded. Scope is ' + reg.scope); 
    }).catch(function(error) { 
    // registration failed 
    console.log('Registration failed with ' + error); 
    }); 
}; 
</script> 

Jak mogę pozwolić tego rodzaju zakresu?

Odpowiedz

12

max scope for a service worker is where it is located. Oznacza to, że nie można zarejestrować jednego pracownika serwisowego pod numerem /sw/ w scope: '/public_html/', chyba że zostanie dołączony specjalny nagłówek Service-Worker-Allowed ustawiony na nowy zakres maksymalny dla pracownika serwisowego.

Podsumowując, jeśli można dodać ten nagłówek, gdy służąc pracownik serwisowy, ustawić go w następujący sposób:

Service-Worker-Allowed: /public_html/ 

Jeśli nie, należy umieścić SW w pewnym miejscu powyżej zakresie.

4

Zmień właściwość scope obiektu opcji rejestracji (drugi parametr navigator.serviceWorker.register()) na adres URL, do którego pracownik serwisu ma dotrzeć. W twoim przypadku może to być ../public_html.

// ... 
navigator.serviceWorker.register('sw/notifications.js', { scope: '../public_html/' }) 
// ... 

Ten parametr będzie domyślnie ./ (w stosunku do scenariusza ServiceWorker) Jeżeli opcje obiekt nie jest przewidziane, albo nie ma scope nieruchomości.

Ponadto, wyznaczając scope któregokolwiek origin inny niż bieżący pochodzenia will reject the registration Promise with a SecurityError exception.


Literatura:

https://www.w3.org/TR/service-workers/#navigator-service-worker-register

https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameters

+3

Spowoduje to zgłoszenie błędu stwierdzającego, że zakres wykracza poza dozwolony zakres. Musisz także ustawić nagłówek zgodnie z drugą odpowiedzią. –