Javascript查找链接被点击或以其他方式打开时

时间:2017-01-17 20:50:34

标签: javascript dom javascript-events hyperlink

注册点击事件并确定是否已点击A元素非常简单:

window.addEventListener('click', ()=>{
    if (event.which !== 1 && event.which !== 2) // left of middle click
        return
    var element = event.target
    if (element.tagName !== 'A') {
        while(element.parentNode) {
            element = element.parentNode
            if (element.tagName === 'A')
                break
        }
        if (element.tagName !== 'A')
            return
    }
    console.log('A-Element was left clicked')
})

但是,当用户通过right click - > open link打开链接或使用JavaScript(window.open(),{{1}打开链接时,我的代码无法检测到该链接},...)。

Is right click a Javascript event?无法解决我的问题,因为右键点击本身不会打开链接。

所以,我想知道是否有一个很好的方法可以找到链接打开的时间,而不仅仅是点击它。

我发现browser.tabs.onUpdated这是一个在更新标签时会被触发的事件。它虽然是扩展专属的。

2 个答案:

答案 0 :(得分:1)

这可能会让您关闭,但它无法处理所有情况,例如右键单击并在新窗口或新选项卡中打开。基本上,如果您在新选项卡中打开任何内容,此示例将无效。但是,如果您在当前选项卡/窗口中打开任何内容,无论它是如何完成的(右键单击,window.open),它都将起作用。它是window.onbeforeunload事件。它在从当前页面导航AWAY之前触发。

window.onbeforeunload = function () {
    alert("Navigating away...");
};

答案 1 :(得分:0)

嗯,不确定这是最好的答案,但有了jQuery的event.which,这是可能的:

$('#element').mousedown(function(event) {
    switch (event.which) {
        case 1:
            alert('Left click pressed.');
            break;
        case 2:
            alert('Middle button pressed.');
            break;
        case 3:
            alert('Right click pressed.');
            break;
        default:
            alert('default');
    }
});

以下代码段:

$('#link').mousedown(function(event) {
  switch (event.which) {
    case 1:
      alert('Left click pressed.');
      break;
    case 2:
      alert('Middle button pressed.');
      break;
    case 3:
      alert('Right click pressed.');
      break;
    default:
      alert('default');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<a href="whatever.com" id="link">click to find out</a>