2016-11-02 2 views
0

Есть ли способ передать значение сервисному работнику, чтобы он мог использовать его во время этапа установки?Есть ли способ передать некоторую ценность сервисному специалисту, который будет использоваться на этапе установки?

В качестве примера, если ресурсы вашей веб-страницы находятся в папке, основанной на версии выпуска проекта (resource-2.11/js/...). В какой-то момент вам нужно знать resource-2.11 для кэширования некоторых файлов. Можно ли передать это значение?

+1

Не могли бы вы сделать шаг сборки, а не определять его динамически во время выполнения? – Timo

+0

@TimoSta Да, это решит проблему в моем случае. Было бы полезно знать, могут ли serviceworkers взять какие-то параметры, основываясь на всем, что я вижу, это невозможно: / – stef52

ответ

2

Существует несколько разных подходов.

Создание файла 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.

 Смежные вопросы

  • Нет связанных вопросов^_^