FetchEvent
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since апÑÐµÐ»Ñ 2018 г..
* Some parts of this feature may have varying levels of support.
ÐÑо Ñип ÑобÑÑий fetch, обÑабаÑÑваемÑÑ
в глобалÑном конÑекÑÑе service worker. Ðанное ÑобÑÑие ÑодеÑÐ¶Ð¸Ñ Ð´Ð°Ð½Ð½Ñе о запÑоÑе, вклÑÑÐ°Ñ ÐµÐ³Ð¾ ÑелÑ. Ðно пÑедоÑÑавлÑÐµÑ Ð¼ÐµÑод event.respondWith(), Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑого service worker Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑвеÑиÑÑ Ð½Ð° запÑоÑ.
ÐонÑÑÑÑкÑоÑ
FetchEvent()-
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑекÑ
FetchEvent. Ðак пÑавило, даннÑй конÑÑÑÑкÑÐ¾Ñ Ð½Ðµ иÑполÑзÑеÑÑÑ. ÐÑаÑÐ·ÐµÑ ÑамоÑÑоÑÑелÑно ÑоздаÑÑ Ð´Ð°Ð½Ð½Ñе обÑекÑÑ Ð¸ пеÑедаÑÑ Ð¸Ñ Ð² обÑабоÑÑик ÑобÑÑийfetch.
СвойÑÑва
ÐаннÑй клаÑÑ Ð½Ð°ÑледÑÐµÑ Ð²Ñе ÑвойÑÑва клаÑÑа Event.
fetchEvent.clientIdТолÑко Ð´Ð»Ñ ÑÑениÑ-
ÐденÑиÑикаÑоÑклиенÑаÑого же иÑÑоÑника, оÑпÑавивÑего запÑоÑ. fetchEvent.preloadResponseТолÑко Ð´Ð»Ñ ÑÑениÑ-
ÐÑомиÑдлÑзапÑоÑа, или же пÑÑÑой пÑомиÑ, еÑли не пÑоизоÑла навигаÑÐ¸Ñ Ð¸Ð»Ð¸ пÑедзагÑÑзка навигаÑии оÑклÑÑена. fetchEvent.requestТолÑко Ð´Ð»Ñ ÑÑениÑ-
ÐапÑÐ¾Ñ (
Request) Ð¾Ñ Ð±ÑаÑзеÑа. fetchEvent.replacesClientIdТолÑко Ð´Ð»Ñ ÑÑениÑ-
ÐденÑиÑикаÑоÑклиенÑа, заменÑемого пÑи навигаÑии. fetchEvent.resultingClientIdТолÑко Ð´Ð»Ñ ÑÑениÑ-
ÐденÑиÑикаÑоÑклиенÑа, заменивÑего пÑоÑлÑй ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ñи навигаÑии.
ÐеÑодÑ
ÐаннÑй клаÑÑ Ð½Ð°ÑледÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа ExtendableEvent.
fetchEvent.respondWith()-
ÐеÑÐµÑ Ð²Ð°ÑÑÐ²Ð°ÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¸ оÑпÑавлÑÐµÑ Ð¿ÑÐ¾Ð¼Ð¸Ñ Ñ Ð¾ÑвеÑом.
extendableEvent.waitUntil()-
ÐÑÐ¾Ð´Ð»ÐµÐ²Ð°ÐµÑ Ð²Ñполнение обÑабоÑÑика ÑобÑÑÐ¸Ñ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеданного пÑомиÑа. ÐÑполÑзÑеÑÑÑ ÑÑÐ¾Ð±Ñ ÑведомиÑÑ Ð±ÑаÑÐ·ÐµÑ Ð¾ ÑобÑÑии, пÑодолжаÑÑемÑÑ Ð¿Ð¾Ñле оÑпÑавки оÑвеÑа, Ñаком как обновление кеÑа или поÑÐ¾ÐºÐ¾Ð²Ð°Ñ Ð¿ÐµÑедаÑа.
ÐÑимеÑÑ
Рданном пÑимеÑе вÑе не-GET запÑоÑÑ Ð±ÑдÑÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ ÑÑандаÑÑнÑми ÑÑедÑÑвами бÑаÑзеÑа. Ð ÑлÑÑае GET запÑоÑов, service worker попÑобÑÐµÑ Ð½Ð°Ð¹Ñи оÑÐ²ÐµÑ Ð² кеÑе, а в ÑлÑÑае его оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð´Ð°Ð½Ð½Ñе Ñ ÑеÑвеÑа. Также, он аÑÐ¸Ð½Ñ Ñонно Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ Ð´Ð°Ð½Ð½Ñе в кеÑе.
self.addEventListener("fetch", (event) => {
// Ð ÑлÑÑае не-GET запÑоÑа бÑаÑÐ·ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñам обÑабаÑÑваÑÑ ÐµÐ³Ð¾
if (event.request.method != "GET") return;
// ÐбÑабаÑÑваем запÑÐ¾Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ¸ service worker
event.respondWith(
(async function () {
// ÐÑÑаемÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾ÑÐ²ÐµÑ Ð¸Ð· кеÑа.
const cache = await caches.open("dynamic-v1");
const cachedResponse = await cache.match(event.request);
if (cachedResponse) {
// ÐÑли ÐºÐµÑ Ð±Ñл найден, возвÑаÑаем даннÑе из него
// и запÑÑкаем Ñоновое обновление даннÑÑ
в кеÑе.
event.waitUntil(cache.add(event.request));
return cachedResponse;
}
// Ð ÑлÑÑае, еÑли даннÑе не бÑли Ð½Ð°Ð¹Ð´ÐµÐ½Ñ Ð² кеÑе, полÑÑаем иÑ
Ñ ÑеÑвеÑа.
return fetch(event.request);
})(),
);
});
СпеÑиÑикаÑии
| Specification |
|---|
| Service Workers Nightly > # fetchevent-interface > |