在独立的Chrome PWA中打开target =“ _ blank”链接时出现重复请求

时间:2019-07-05 14:18:18

标签: google-chrome service-worker progressive-web-apps

我有一个运营服务人员的网站。当我使用“添加到主屏幕”(独立模式)将网站安装为PWA应用程序时,该站点运行正常,除了任何target="_blank"链接在服务器端导致重复请求-两个同时请求,但只有一个窗口打开。即使服务工作者没有缓存逻辑(提取处理程序为空),也会发生这种情况

  • 我在Chrome浏览器(华为,Android 9),Chrome浏览器(三星,Android 6)和三星Internet浏览器上看到了这个,但在iOS Safari上却没有。
  • 无论是否在PWA中实现了任何提取事件,重复请求都会发生
  • service-worker fetch事件中仅捕获一个调试器事件,fiddler看到两个请求
  • 仅在“已安装” PWA中发生,而不在常规浏览器或非PWA主屏幕网站快捷方式中发生
  • 未缓存(或应该缓存)资源

我制作了一个最小的repro应用程序,可以在以下位置复制该问题:

/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内容无关紧要(如果不存在,则只是404的两倍)

只有target =“ _ blank”链接两次访问服务器,“ _ self”正常运行。有什么主意如何找出造成额外点击的原因吗?

0 个答案:

没有答案