У меня есть (в идеале) безопасный объект входа в систему, который я хотел бы сохранить в контексте работника службы, но ServiceWorkerGlobalScope, похоже, сбрасывается случайным образом (Chrome 47 Ubuntu).
Для проверки в сервис-воркер вставил:
var iid = setInterval(function () {
var now = performance.now();
return self.clients.matchAll().then(function(clients) {
return Promise.all(clients.map(function(client) {
return client.postMessage({messageType: "canary", value: now})
}))
})
}, 1000);
И в клиенте:
navigator.serviceWorker.addEventListener("message", function(event) {
if (event.data.messageType = "canary") console.log(event.data.value)
});
В результате на клиентской консоли появилось:
⋮
147200.06500000003
148200.08000000002
149200.09000000003
1212.9800000000002
2212.5350000000003
3212.4700000000003
⋮
К сожалению, я до сих пор не могу достоверно воспроизвести это.
Насколько мне известно, сервис-воркер должен быть удален из памяти в какой-то момент после того, как его объект clients
больше не возвращает никаких Client
. Однако вышеописанное происходит как минимум за десять секунд до любого события отмены регистрации, о котором я могу догадаться.
Итак, у меня есть два вопроса. Что может быть причиной этого и каковы наилучшие методы сохранения объекта как связанного со сценарием работника службы без сериализации и, желательно, без отправки в контекст клиента?