Существует несколько разных подходов.
Создание файла service-worker.js
во время сборки, вероятно, является правильным подходом, как это предлагается в комментариях. Это имеет то преимущество, что событие install
будет срабатывать при каждом изменении вашего префикса с версией, так как любого изменения содержимого service-worker.js
достаточно, чтобы вызвать service worker update.
Но, если вы не можете это сделать по какой-либо причине, другой ответ на общий вопрос о том, «как вы передаете значение сервисному работнику, доступному во время установки», заключается в использовании IndexedDB
. Вы можете установить значение с главной страницы, а затем зарегистрировать сервисного работника, а затем работник службы может прочитать значение. Вы должны заметить, что изменение значения в 10 с главной страницы будет , но не.
И, наконец, есть другой подход, который вы могли бы использовать, если вы хотите запускать обновления сервис-работника при изменении значения, но по какой-то причине вы не можете изменить service-worker.js
во время шага сборки. Это включает значение в качестве параметра URL запроса, который прилагается к концу service-worker.js
при регистрации его со страницы:
// From your web page:
if ('serviceWorker' in navigator) {
const value = encodeURIComponent('some-parameter-value');
const swUrl = `service-worker.js?_param=${value}`;
navigator.serviceWorker.register(swUrl);
}
// From your service worker:
self.addEventListener('install', event => {
const selfUrl = new URL(self.location);
// Uses https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
const parameterValue = selfUrl.searchParams.get('_param');
// Do something with parameterValue
});
регистрация работника службы с другим URL будет инициировать обновление службы уборщицы, что эквивалентно изменяя содержимое вашего service-worker.js
.
Не могли бы вы сделать шаг сборки, а не определять его динамически во время выполнения? – Timo
@TimoSta Да, это решит проблему в моем случае. Было бы полезно знать, могут ли serviceworkers взять какие-то параметры, основываясь на всем, что я вижу, это невозможно: / – stef52