У меня есть сайт, на котором работает сервисный работник.Когда я устанавливаю веб-сайт как приложение PWA, используя Добавить на главный экран (в автономном режиме), сайт работает нормально, за исключением того, что любые target="_blank"
ссылки вызывают дублирующий запрос на стороне сервера - есть два одновременных запроса, но открывается только одно окно.Это происходит даже тогда, когда у работника сервиса нет логики кэширования (обработчик выборки пуст)
- Я вижу это на Chrome (Huawei, Android 9), а также на Chrome (Samsung, Android 6) иИнтернет-браузер Samsung - но не в iOS Safari.
- Дублирующий запрос происходит независимо от того, реализовано ли какое-либо событие выборки в PWA или нет
- Только одно событие отладчика фиксируется в выборке сервисного работникасобытие, fiddler видит два запроса
- происходит только в «установленном» PWA, а не в обычном браузере или ярлыке на веб-сайте, не поддерживающем PWA
- Ресурс не кэшируется (или должен кэшироваться)
Я создал минимальное приложение для воспроизведения, в котором я могу повторить проблему:
/index.html
/page.html
/service-worker.js
/manifest.json
index.html:
<head><link rel="manifest" href="/manifest.json"></head>
<body>
<a href="/page.html" target="_blank">CLICK ME</a>
<script>navigator.serviceWorker.register('/service-worker.js', { scope: '/' });</script>
</body>
manifest.json:
{
"background_color": "#FFFFFF",
"description": "Repro application",
"display": "standalone",
"name": "Repro application",
"short_name": "Repro application",
"start_url": "/index.html",
"theme_color": "#FFFFFF"
}
service-worker.js:
(function () {
'use strict';
self.addEventListener('fetch', function (event) { });
self.addEventListener('activate', function (event) { });
}());
Также происходит вообще без события извлечения или с событием извлечения, просто возвращающим обещание извлечения по сети (таким образом, поведение браузера по умолчанию)
page.html contenЭто не имеет значения (если его там нет, просто 404 дважды)
Только ссылки target = "_ blank" дважды попадают на сервер, "_self" работает нормально.Есть идеи, как отследить причину дополнительного удара?