2017-11-06 1 views
0

Angenommen können sagen, wir sw1.js haben, die die Homepage steuertWidersprüchliche Dienst-Arbeitsumfänge (breite und schmale)

sw.js ==> scope "/"

jetzt sind, dass wir haben einen anderen Servicemitarbeiter sw2.js, die die Produktseite Controller

sw2.js ==> Anwendungsbereich ist "/ Produkt"

Wenn wir die Homepage besuchen, gefolgt von der Produktseite, werden beide Service-Mitarbeiter installiert und aktiviert.

Frage ist: Wenn wir auf der Produktseite (sw2.js) sind, werden Homepage Servicemitarbeiter (sw1.js) stören?

(Im Idealfall beide Service-Mitarbeiter (sw1.js, sw2.js) steuert die Seite aber sw2.js ist mit schmaleren Rahmen, die das Produkt als die Homepage Servicemitarbeiter sw1.js Spiele, die breiteren Anwendungsbereich hat)

Antwort

1

Jede Seite kann von höchstens einem Servicemitarbeiter kontrolliert durch. Wenn mehrere Service-Mitarbeiter für einen Ursprung registriert sind und sich ihre Bereiche überschneiden, "gewinnt" der Service-Mitarbeiter mit dem am längsten übereinstimmenden Bereich (d. H. Der genaueste Bereich-Übereinstimmung), und er wird derjenige sein, der die Seite steuert.

Es gibt nur eine Falte, die ich klarstellen möchte: Sobald ein Service Worker die Kontrolle über eine Clientseite hat, werden alle HTTP-Anforderungen dieser Seite die fetch Handler des steuernden Service-Arbeiters auslösen. Wenn es keinen fetch Handler gibt, oder wenn es einen fetch Handler gibt, aber event.respondWith() für eine bestimmte Anfrage nicht aufruft, dann wird die Anfrage an das Netzwerk gerichtet, als ob es keine Service-Mitarbeiter-Beteiligung gäbe. Die Anfrage wird nicht durch alle anderen Service-Mitarbeiter fallen, die auch registriert werden könnten. Nur ein Service-Mitarbeiter kann eine bestimmte Anfrage bearbeiten.

(Die other response könnte Verhalten sein beschreiben aufgrund eines HTTP-Umleitung von /product zu /product/ oder so ähnlich, dass es wie die gleichen Anfrage aussieht zweimal behandelt wurde, wenn es wirklich zwei verschiedene HTTP-Anfragen war.)

0

ich habe es schnell mit Chrome 63.0.3239.2 ich folgendes Ergebnis hinzufügen bekam: von sw.js

/product/=> behandelt durch sw2.js

/andere

/=> behandelt => behandelt von sw.js

Für/Produkt habe ich ein seltsames Verhalten: zuerst sw.js behandelt die Anfrage, dann sw2.js behandelt die Anfrage auch.

So ist der sicherste Weg ist wahrscheinlich keine mixup haben mit der URL-Produkt mit einer Endung Strich (/ Produkt /)