我可以拦截中间点击和新标签链接点击吗?

我可以拦截中间点击和新标签链接点击吗?

问题描述:

可以说我想拦截某些锚点元素链接并跟踪它们。我有以下工程。我可以拦截中间点击和新标签链接点击吗?

HTML

<a href="/foo" data-mytracking="fooclicked">go to foo</a> 

JS

$('a[data-mytracking]').click((event) => { 
    event.preventDefault(); 
    // Do some synchronous code to log tracking 
    console.log(event.target.getAttribute('data-mytracking'), event.target.href); 
    window.location = event.target.href; 
}); 

有没有一种方法能有这个点击代码仍然截取中间键或右键点击“在新标签中打开”?我知道我可以做到这一点,如果我使href="javascript:void(0)"。但是随后人们失去了在新标签中打开的能力。

+0

那么你可以查找rmb和mmb的关键代码并为这些关键字添加一个监听器。然后,您将调用preventDefault()并仍然获取您的数据 - 我的跟踪值。 –

某些浏览器有auxclickevent。您还可以跟踪event.whichto track middle button

$("a[data-mytracking]").on('click', function(ev) { 
    if(ev.which== 2) { 
     e.preventDefault(); 
     // do smth else 
    } 
}); 

通过contextmenu打开可能不可追踪,但您可以有oncontextmenu事件。

P.S.至少Chrome不会触发点击打开一个中间按钮的新标签。但它确实触发了mouseup

+1

您可以阻止整个oncontextmenu事件,就像阻止中间点击一样。也可以使用普通的js选择'document.querySelector('.css-selector')。addEventListener('click',ev => {//在这里执行类似的事情})''。至少,在Chrome中只能屏蔽上下文菜单中的操作是不可能的。我不知道其他浏览器。 – SethWhite

+1

普通js针对不同的浏览器有不同的'which'。 'jquery'使它普遍 –

+0

只是使它可用,并不是说哪个更好。至少在Firefox和Chrome中,“.which”是一致的。 – SethWhite