Постановка проблемы
В настоящее время я разрабатываю веб-приложение, которое пытается использовать сервисных работников для обмена данными между различными вкладками.
В процессе, я заметил, что Firefox и Chrome демонстрируютдругое поведение:
- В Chrome есть один экземпляр сервисного работника, который управляет всеми вкладками / окнами, открытыми в его области действия.
- В Firefox, похоже, есть отдельный сервисный работникэкземпляр для каждой открываемой вкладки / окна.
Сужая причину, я сократил проблему до минимального примера, показанного ниже.
Открытие этой тестовой страницы по два раза в обоих Firefoxи Chrome (и перезагрузка, позволяющая работнику получить контроль), я обнаружил, что хотя Chrome считает нажатия кнопок на обеих вкладках, Firefox, кажется, ведет отдельный подсчет для каждой вкладки.
На этомТочка, я нахожусь в конце, чтобы понять, почему это так.
Минимальный пример
test.html
<!doctype html>
<html lang="en">
<head></head>
<body>
<script src="test-client.js"></script>
<input type="button" id="test-button" value="Click me!" />
<div id="test-output">Click the button!</div>
</body>
</html>
test-client.js
navigator.serviceWorker.register('/test-worker.js');
document.addEventListener('DOMContentLoaded', () =>
{
let output = document.getElementById('test-output');
document.getElementById('test-button').addEventListener('click', () =>
{
fetch('/worker/count').then((r) => r.text()).then((t) => { output.innerText = t; });
});
});
test-worker.js
let count = 0;
self.addEventListener('fetch', (e) =>
{
if ((new URL(e.request.url).pathname) === '/worker/count')
{
++count;
e.respondWith(new Response(''+count));
}
else
e.respondWith(fetch(e.request));
});