如果要在新的或当前选项卡中打开链接,如何检查

时间:2018-03-06 23:35:37

标签: javascript fetch service-worker

我有服务工作者,它会侦听所有获取事件。

有没有办法检查,如果点击链接的用户发起的请求即将在当前或新标签中打开?

self.addEventListener('fetch', (event) => {
    event.respondWith(async function respond() {
        if (linkAboutToOpenInCurrentTab) {
            // do something
            return fetch(newRequest)
        }
        return fetch(event.request);
    }());
});

1 个答案:

答案 0 :(得分:0)

服务工作者仅响应网络请求(FetchEvent),并且服务工作者无法访问所有用户交互和DOM事件。

您可以尝试从应用程序本身(SW外部)捕获链接点击。对于新的标签/窗口,target将是“_blank”。

<a id="a1" href="">Self</a> - 
<a id="a2" target="_blank" href="">New Tab/Window</a>

<script>
  const links = document.querySelectorAll('a');
  for (const link of links) {
    link.addEventListener('click', function(event) {
      const target = this.target;
      console.log(target)
    })
  }
</script>