Мой сайт регистрирует ServiceWorker, который распространяется только на URL, начинающиеся с /sw/...
.
/**
* Register the Service Worker.
*/
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('{{ URL::asset('sw/serviceworker.js') }}', {scope: './sw/'})
.then(registration => {
console.log("SW registered. Scope: ", registration.scope);
}).catch(err => { console.error("SW Register failed: ", err); });
}
Одна из страниц в пути /sw/...
выполняет выборку на сервер, чтобы проверить, доступно ли соединение с сервером. Адрес, который он выбирает, - /ping
, простая страница, которая возвращает JSON. Обратите внимание, что адрес /ping/
- это , а не в пути /sw/...
).
// Sample of the bit inside my promise that checks for the server
// this is the request that is being cached
fetch('/ping')
.then(function(response) {
if (response.status == 200) {
console.log('%c Server available! ', 'background: #20c997; color: #000');
}
})
.catch(function(err) {
console.log('fetch failed! ', err);
});
Тем не менее, браузер четко показывает serviceWorker, перехватывающий запрос на /ping
.
Из консоли разработчика Google Chrome:
▶ Fetching http://127.0.0.1:8000/ping Request {method: "GET", url: "http://127.0.0.1:8000/ping", headers: Headers, referrer: "http://127.0.0.1:8000/sw/create", referrerPolicy: "no-referrer-when-downgrade", …} serviceworker.js:105
▶ Fetched over network http://127.0.0.1:8000/ping: Response {type: "basic", url: "http://127.0.0.1:8000/ping", redirected: false, status: 200, ok: true, …}
Это не то, что я ожидаю, потому что я хочу, чтобы ServiceWorker только перехватывал запросы на адреса, начинающиеся с /sw/...
Есть ли где-то в спецификации или предполагаемом поведении ServiceWorkers, что он может кэшировать ответы для извлечения событий, сделанных страницами в области видимости, даже если адрес, на который он попадает, находится вне области видимости?