InstallEvent: Methode addRoutes()
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die addRoutes()
-Methode der InstallEvent
-Schnittstelle legt eine oder mehrere statische Routen fest, die Regeln für das Abrufen bestimmter Ressourcen definieren, die bereits vor dem Start des Service Workers verwendet werden. Dies ermöglicht es Ihnen, z.B. einen Service Worker in Fällen zu umgehen, in denen Sie immer eine Ressource aus dem Netzwerk oder einem Browser-Cache
abrufen möchten, und vermeidet so den Leistungsaufwand unnötiger Service Worker-Zyklen.
Syntax
addRoutes(routerRules)
Parameter
routerRules
-
Ein einzelnes Objekt oder ein Array von einem oder mehreren Objekten, das Regeln darstellt, wie bestimmte Ressourcen abgerufen werden sollen. Jedes
routerRules
-Objekt enthält die folgenden Eigenschaften:condition
-
Ein Objekt, das eine oder mehrere Bedingungen definiert, die angeben, welche Ressourcen dieser Regel entsprechen sollen. Folgende Eigenschaften können enthalten sein; wenn mehrere Eigenschaften verwendet werden, muss eine Ressource alle angegebenen Bedingungen erfüllen, um der Regel zu entsprechen.
not
Optional-
Ein
condition
-Objekt, das Bedingungen definiert, die ausdrücklich nicht erfüllt sein dürfen, um der Regel zu entsprechen. Bedingungen, die innerhalb einernot
-Bedingung definiert sind, sind mit anderen Bedingungen gegenseitig ausschließend. or
Optional-
Ein Array von
condition
-Objekten. Ein Satz dieser definierten Bedingungen muss erfüllt sein, damit die Regel zutrifft. Bedingungen, die innerhalb eineror
-Bedingung definiert sind, sind mit anderen Bedingungen gegenseitig ausschließend. requestMethod
Optional-
Ein String, der die HTTP-Methode darstellt, mit der eine Anfrage gesendet werden sollte, damit sie der Regel entspricht, wie
"get"
,"put"
oder"head"
. requestMode
Optional-
Ein String, der den Modus darstellt, den eine Anfrage haben muss, um der Regel zu entsprechen, zum Beispiel
"same-origin"
,"no-cors"
oder"cors"
. requestDestination
Optional-
Ein String, der das Ziel einer Anfrage darstellt, d.h. welchen Inhaltstyp angefordert werden soll, damit die Regel zutrifft. Beispiele sind
"audio"
,"document"
,"script"
und"worker"
. runningStatus
Optional-
Ein aufzuzählender Wert, der den erforderlichen Betriebsstatus des Service Workers darstellt, damit eine Anfrage der Regel entspricht. Werte können
"running"
oder"not-running"
sein. urlPattern
Optional-
Eine
URLPattern
-Instanz oder einURLPattern()
-Konstruktor-input
-Muster, das die URLs darstellt, die der Regel entsprechen.
source
-
Ein aufzuzählender Wert oder ein Objekt, das die Quelle spezifiziert, aus der übereinstimmende Ressourcen geladen werden. Mögliche aufzuzählende Werte sind:
"cache"
-
Ressourcen werden aus einem Browser-
Cache
geladen. "fetch-event"
-
Ressourcen werden über den
fetch
-Ereignishandler des Service Workers geladen. Dies kann mit der"runningStatus"
-Bedingung kombiniert werden, um Ressourcen aus einem Service Worker zu laden, wenn dieser läuft, und auf eine statische Route im Netzwerk zurückzugreifen, wenn nicht. "network"
-
Ressourcen werden aus dem Netzwerk geladen.
"race-network-and-fetch-handler"
-
Versucht, Ressourcen sowohl aus dem Netzwerk als auch über den
fetch
-Ereignishandler des Service Workers gleichzeitig zu laden. Welche zuerst abgeschlossen ist, wird verwendet.
Der
source
-Wert kann auch auf ein Objekt gesetzt werden, das eine einzige Eigenschaft,cacheName
, enthält, deren Wert ein String ist, der den Namen eines Browser-Cache
darstellt. Übereinstimmende Ressourcen werden aus diesem spezifischen benannten Cache geladen, wenn er existiert.
Rückgabewert
Ein Promise
, das mit undefined
erfüllt wird.
Ausnahmen
TypeError
DOMException
-
Wird ausgelöst, wenn eines oder mehrere der Regelobjekte innerhalb von
routerRules
ungültig sind oder einsource
-Wert von"fetch-event"
angegeben ist, wenn der zugeordnete Service Worker keinenfetch
-Ereignishandler hat. Wird auch ausgelöst, wenn versucht wird,or
mit einem anderen Bedingungstyp zu kombinieren.
Beispiele
Spezifische Anforderungen zum Netzwerk umleiten, wenn der Service Worker nicht läuft
Im folgenden Beispiel werden URLs, die mit /articles
beginnen, zum Netzwerk umgeleitet, wenn der Service Worker derzeit nicht läuft:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
urlPattern: "/articles/*",
runningStatus: "not-running",
},
source: "network",
});
});
Formular-POST-Anfragen direkt zum Netzwerk umleiten
Im folgenden Beispiel werden POST
-Anfragen an ein Formular direkt zum Netzwerk gesendet und umgehen den Service Worker:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
urlPattern: "/form/*",
requestMethod: "post",
},
source: "network",
});
});
Bestimmte Bildanfragen zu einem benannten Cache umleiten
Im folgenden Beispiel wird der Browser-Cache
namens "pictures"
zum Abrufen von Dateien mit den Erweiterungen .png
oder .jpg
verwendet:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
or: [{ urlPattern: "*.png" }, { urlPattern: "*.jpg" }],
},
source: {
cacheName: "pictures",
},
});
});
Hinweis: Wenn der Cache nicht existiert, verwendet der Browser standardmäßig das Netzwerk, damit die angeforderten Ressourcen dennoch abgerufen werden können, sofern das Netzwerk verfügbar ist.
Es ist nicht möglich, or
mit einer anderen Bedingung zu kombinieren – dies führt zu einem TypeError
. Wenn Sie zum Beispiel Dateien mit den Erweiterungen .png
oder .jpg
abgleichen möchten, aber nur wenn die requestMethod
get
ist, müssten Sie zwei separate Bedingungen angeben:
addEventListener("install", (event) => {
event.addRoutes(
{
condition: {
urlPattern: "*.png",
requestMethod: "get",
},
source: {
cacheName: "pictures",
},
},
{
condition: {
urlPattern: "*.jpg",
requestMethod: "get",
},
source: {
cacheName: "pictures",
},
},
);
});
Spezifikationen
Specification |
---|
Service Workers # register-router-method |