Расширяемый событие
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает во многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.
Примечание: Эта функция доступна только в Сервисных рабочих процессах.
Интерфейс ExtendableEvent расширяет срок действия событий install и activate, которые генерируются на глобальном уровне в рамках жизненного цикла сервисного рабочего процесса. Это гарантирует, что любые функциональные события (например, FetchEvent) не будут генерироваться до тех пор, пока не будут обновлены схемы базы данных и удалены устаревшие записи кеша.
Если waitUntil() вызывается вне обработчика ExtendableEvent, браузер должен сгенерировать InvalidStateError; также обратите внимание, что несколько вызовов будут накапливаться, и полученные обещания будут добавлены в список обещаний продления срока действия.
Этот интерфейс наследуется от интерфейса Event.
Примечание: Этот интерфейс доступен только когда глобальная область видимости — ServiceWorkerGlobalScope. Он недоступен, когда это Window или область видимости другого типа рабочего процесса.
Конструктор
ExtendableEvent()-
Создает новый объект
ExtendableEvent.
Свойства экземпляра
Не реализует каких-либо специфических свойств, но наследует свойства от своего родителя, Event.
Методы экземпляра
Наследует методы от своего родителя, Event.
ExtendableEvent.waitUntil()-
Расширяет срок действия события. Предполагается, что он вызывается в обработчике события
installдля рабочего процессаinstallingи в обработчике событияactivateдля рабочего процессаactive.
Примеры
Этот фрагмент кода взят из примера сервисного рабочего процесса предзагрузки (см. живой пример предзагрузки.) Код вызывает ExtendableEvent.waitUntil() в oninstall, откладывая обработку рабочего процесса ServiceWorkerRegistration.installing как установленного до успешного разрешения переданного обещания. Обещание разрешается, когда все ресурсы извлечены и помещены в кеш, или при возникновении любого исключения.
Фрагмент кода также демонстрирует лучший подход к версионированию кешей, используемых сервисным рабочим процессом. Хотя в этом примере только один кеш, тот же подход применим и для нескольких кешей. Он отображает краткое обозначение идентификатора кеша в конкретное версионированное имя кеша.
Примечание: В Chrome, сообщения протоколирования отображаются через интерфейс «Просмотреть» для соответствующего сервисного рабочего процесса, доступного по адресу chrome://serviceworker-internals.
const CACHE_VERSION = 1;
const CURRENT_CACHES = {
prefetch: `prefetch-cache-v${CACHE_VERSION}`,
};
self.addEventListener("install", (event) => {
const urlsToPrefetch = [
"./static/pre_fetched.txt",
"./static/pre_fetched.html",
"https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif",
];
console.log(
"Handling install event. Resources to pre-fetch:",
urlsToPrefetch,
);
event.waitUntil(
caches
.open(CURRENT_CACHES["prefetch"])
.then((cache) => {
return cache
.addAll(
urlsToPrefetch.map((urlToPrefetch) => {
return new Request(urlToPrefetch, { mode: "no-cors" });
}),
)
.then(() => {
console.log("All resources have been fetched and cached.");
});
})
.catch((error) => {
console.error("Pre-fetching failed:", error);
}),
);
});
Примечание: При извлечении ресурсов крайне важно использовать {mode: 'no-cors'} если есть вероятность, что ресурсы предоставляются сервером, не поддерживающим CORS. В этом примере, www.chromium.org не поддерживает CORS.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
ExtendableEvent |
41 | 17 | 44 | 24 | 11.1 | 41 | 44 | 24 | 11.3 | 4.0 | 41 |
ExtendableEvent |
40 | 17 | 44 | 24 | 11.1 | 40 | 44 | 24 | 11.3 | 4.0 | 40 |
waitUntil |
40 | 17 | 44 | 24 | 11.1 | 40 | 44 | 24 | 11.3 | 4.0 | 40 |
См. также
© 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/ExtendableEvent