我有服务工作者,它会侦听所有获取事件。
有没有办法检查,如果点击链接的用户发起的请求即将在当前或新标签中打开?
self.addEventListener('fetch', (event) => {
event.respondWith(async function respond() {
if (linkAboutToOpenInCurrentTab) {
// do something
return fetch(newRequest)
}
return fetch(event.request);
}());
});
答案 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>