ServiceWorker обрабатывает события извлечения URL-адресов вне области видимости - PullRequest
0 голосов
/ 03 января 2019

Мой сайт регистрирует 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, что он может кэшировать ответы для извлечения событий, сделанных страницами в области видимости, даже если адрес, на который он попадает, находится вне области видимости?

1 Ответ

0 голосов
/ 10 января 2019

Отвечая на мой собственный вопрос ...

Да, это является предполагаемым поведением.Область действия определяется не адресом, по которому производится выборка, а адресом страницы , отправляющей запрос .

Ключевое слово "from" в этой цитате из Руководство Google :

... оно будет обрабатывать события выборки и сообщений, которые происходят, когда сетьс вашей страницы сделан запрос или сообщение.

Так что, если JavaScript на /sw/page1.html делает запрос fetch() на /ping, то ServiceWorker считает это "в области действия", поскольку страница отправка запрос начинается с /sw/....

Область действия также включает в себя исходный запрос браузера на получение страницы.Поэтому, если браузер пытается перейти к страницам, начинающимся с /sw/..., и если зарегистрирован ServiceWorker, он будет обрабатывать этот запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...