InstallEvent: метод addRoutes()
Экспериментально: Это экспериментальная технология experimental technology
Перед использованием в производстве внимательно проверьте таблицу совместимости с браузерами.
Метод addRoutes() интерфейса InstallEvent определяет один или несколько статических маршрутов, которые задают правила для получения определённых ресурсов, которые будут использоваться даже до запуска сервисного работника. Это позволяет, например, обойти сервисный работник в случаях, когда вам всегда нужно получать ресурс из сети или браузерного Cache, и избегает накладных расходов на ненужные циклы сервисного работника.
Синтаксис
addRoutes(routerRules)
Параметры
routerRules-
Один объект или массив из одного или нескольких объектов, представляющих правила того, как следует получать определенные ресурсы. Каждый
routerRulesобъект содержит следующие свойства:condition-
Объект, определяющий один или несколько условий, которые указывают, какие ресурсы должны соответствовать этому правилу. Можно включить следующие свойства; если используются несколько свойств, ресурс должен удовлетворять всем указанным условиям для соответствия правилу.
notНеобязательно-
Объект
condition, определяющий условия, которым явно не должно соответствовать правило. Условия, определенные внутри условияnot, взаимоисключающие с другими условиями. orНеобязательно-
Массив объектов
condition. Для соответствия правилу должно быть выполнено одно из набора определенных условий. Условия, определенные в условииor, взаимоисключающие с другими условиями. requestMethodНеобязательно-
Строка, представляющая HTTP-метод, который должен быть отправлен запросом для соответствия правилу, например
"get","put", или"head". requestModeНеобязательно-
Строка, представляющая режим запроса, который должен соответствовать правилу, например
"same-origin","no-cors", или"cors". requestDestinationНеобязательно-
Строка, представляющая назначение запроса, т. е. какой тип контента должен быть запрошен для соответствия правилу. Примеры включают
"audio","document","script", и"worker". runningStatusНеобязательно-
Перечисление, представляющее требуемый рабочий статус сервисного работника для соответствия запроса правилу. Значения могут быть
"running"или"not-running". urlPatternНеобязательно-
Экземпляр
URLPatternили шаблон конструктораURLPattern()input, представляющий URL-адреса, которые соответствуют правилу.
source-
Значение перечисления или объект, определяющий источник, из которого будут загружаться соответствующие ресурсы. Возможные значения перечисления:
"cache"-
Ресурсы будут загружаться из браузерного
Cache. "fetch-event"-
Ресурсы будут загружаться через обработчик события
fetchсервисного работника. Это можно комбинировать с условием"runningStatus"для загрузки ресурсов из сервисного работника, если он запущен, и переходить на статический маршрут в сети, если он не запущен. "network"-
Ресурсы будут загружаться из сети.
"race-network-and-fetch-handler"-
Попытки загрузки ресурсов из сети и обработчика события
fetchсервисного работника одновременно. Используется тот, который завершится первым.
Значение
sourceтакже может быть установлено в объект, содержащий единственное свойствоcacheName, значение которого — строка, представляющая имя браузерногоCache. Соответствующие ресурсы будут загружаться из этого конкретного кэша с именем, если он существует.
Возвращаемое значение
Объект Promise, который выполняется со значением undefined.
Исключения
-
TypeErrorDOMException -
Выбрасывается, если один или несколько объектов правил внутри
routerRulesнекорректны или имеют значениеsource"fetch-event", когда связанный сервисный работник не имеет обработчика событияfetch. Также выбрасывается, если вы попытаетесь комбинироватьorс другим типом условия.
Примеры
Направление определённых запросов в сеть, если сервисный работник не запущен
В следующем примере URL-адреса, начинающиеся с /articles , направляются в сеть, если сервисный работник в данный момент не запущен:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
urlPattern: "/articles/*",
runningStatus: "not-running",
},
source: "network",
});
});
Направление POST-запросов формы в сеть
В следующем примере POST-запросы к форме отправляются напрямую в сеть и опускают сервисный работник:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
urlPattern: "/form/*",
requestMethod: "post",
},
source: "network",
});
});
Направление определенных запросов изображений в кэш с именем
В следующем примере браузерный Cache с именем "pictures" используется для получения файлов с расширениями .png или .jpg:
addEventListener("install", (event) => {
event.addRoutes({
condition: {
or: [{ urlPattern: "*.png" }, { urlPattern: "*.jpg" }],
},
source: {
cacheName: "pictures",
},
});
});
Примечание: Если кэш не существует, браузер по умолчанию использует сеть, чтобы запрошенные ресурсы всё ещё могли быть получены, при условии доступности сети.
Вы не можете комбинировать or с другим условием — это приводит к TypeError. Если, например, вам нужно соответствовать файлам с расширениями .png или .jpg , но только когда requestMethod имеет значение get , вам необходимо указать два отдельных условия:
addEventListener("install", (event) => {
event.addRoutes(
{
condition: {
urlPattern: "*.png",
requestMethod: "get",
},
source: {
cacheName: "pictures",
},
},
{
condition: {
urlPattern: "*.jpg",
requestMethod: "get",
},
source: {
cacheName: "pictures",
},
},
);
});
Спецификации
| Спецификация |
|---|
| Сервисные рабочие # register-router-method |
Совместимость с браузерами
| Рабочий стол | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
addRoutes |
123 | 123 | Нет | 109 | Нет | 123 | Нет | 82 | Нет | 27.0 | 123 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes