【问题标题】:javascript prevent middle mouse button from opening link in new tabjavascript阻止鼠标中键在新选项卡中打开链接
【发布时间】:2016-03-07 11:13:58
【问题描述】:

在某些网站上,您可以右键单击链接并选择“在新选项卡中打开”,它工作正常,但如果使用鼠标中键则不能这样做。 我遇到过几次,这并不太烦人,但我仍然很好奇导致这种行为的原因。 (关于如何) 这是一个使用 Chrome 46 以这种方式浏览的网站: http://ebookfriendly.com/free-public-domain-books-sources/ html 链接标签看起来很正常:

<a title="Feedbooks" href="http://www.feedbooks.com/">⇢ Feedbooks</a>

原因一定是javascript中的某些东西。有什么指点吗?

【问题讨论】:

    标签: javascript jquery html css google-chrome


    【解决方案1】:

    好像这个链接有一个事件监听器,它使用preventDefault() 并通过其他方式打开页面。

    编辑:很难说为什么完全他们这样做,但是当我查看整个处理程序时,似乎链接正在传递给谷歌分析:

    function(e) {
        var n = this.getAttribute("href"),
            i = "string" == typeof this.getAttribute("target") ? this.getAttribute("target") : "";
        ga("send", "event", "outbound", "click", n, {
            hitCallback: t(n, i)
        }, {
            nonInteraction: 1
        }), e.preventDefault()
    }
    

    【讨论】:

    • 感谢您的快速回复。作为一个“frontend_dev”,你能告诉我这种做法的任何原因吗?
    • 见我上面的修改答案。所以这似乎是由于谷歌分析。
    • 这里的答案会帮助你,只要确保你访问了鼠标中键的键​​码并做一个语句来检查它是否是那个按钮(我认为它是 2)否则你将完全阻止所有点击事件对链接/链接起作用
    【解决方案2】:

    您可以询问是哪个按钮导致该事件并阻止默认行为。

    document.querySelector("a").addEventListener("click", function(e) { 
       if (e.which === 2) {
          e.preventDefault();
       } 
    }, false);
    

    【讨论】:

    • 很好的答案,我刚刚发表了关于检查已接受答案的正确键码的评论。 +1
    • 那么,如果 preventDefault() 阻止了预期的行为,链接仍然会打开,因为我猜有一些函数正在监听 mouseup 事件?
    • 如果使用鼠标中键则不会打开链接,其他情况下浏览器会按预期运行。
    【解决方案3】:
        $(document).mousedown(function(e){
            if(e.which == 2 ){
                e.preventDefault();
                alert("middle click");   
                return false;
            }
        });
    

    只有在保持 alert() 时才有效

    【讨论】:

      【解决方案4】:

      一种方法是使用auxclick 事件。 (auxclick on MDN)

      以下代码将阻止整个页面的中间点击行为。

      window.addEventListener("auxclick", (event) => {
        if (event.button === 1) event.preventDefault();
      });
      

      【讨论】:

        猜你喜欢
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        • 1970-01-01
        • 2012-04-25
        • 2017-09-03
        相关资源
        最近更新 更多