【问题标题】:Detect if the user wanted to open link in new window or tab (Mac and Windows)检测用户是否想在新窗口或选项卡中打开链接(Mac 和 Windows)
【发布时间】:2014-07-12 17:44:42
【问题描述】:

我有一个链接,为了优化页面响应/流量,我使用 javascript click 处理程序处理其 click 事件。在click,我只加载页面的一部分。但是链接的 URL 是正确的,在独立选项卡中打开它会正确打开页面。

但是当用户按下 CMD-Click 链接(在新选项卡中打开链接)时,click 处理程序运行并且页面在新选项卡中打开。基本上我禁用了 CMD-Click(在新选项卡中打开)功能。如何在代码中检测到这一点,以使 CMD-Click 按预期工作。 (在 Windows 中 CMD 被 Ctrl 代替)?

$(".link").on("click", function(event) {

    if (/* TODO: how to detect if the user CMD/Ctrl-clicked the link? */) {
        return true;
    }

    // ... load only necessary things for normal clicks
})

我必须编写操作系统/浏览器特定的代码来解决上面的TODO 吗? (我使用 jQuery)

【问题讨论】:

  • 你会对鼠标右键/在新标签页中打开做什么?鼠标滚动点击? Shift + 单击?
  • @YuryTarabanko:event.which 可以处理中键。右键单击并选择在新选项卡中打开不会首先触发事件处理程序。
  • @josh3736 我相信有更好的方法来判断您是否需要加载整个页面。也许X-Requested-With 标头可以解决问题
  • 希望对您有所帮助:stackoverflow.com/questions/10660360/…
  • 有很多键可以改变默认行为,而不仅仅是ctrl。你最好使用filter-altered-clicks 之类的东西来为你处理。

标签: jquery browser onclick


【解决方案1】:

检查eventctrlKeyshiftKeymetaKey 属性。这些告诉您用户是否分别持有控制、转移或命令。还要检查which 不是2,这意味着用户中键了链接。

$(".link").on("click", function(event) {

    if (event.ctrlKey || event.shiftKey || event.metaKey || event.which == 2) {
        return true;
    }

    // ... load only necessary things for normal clicks
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2013-03-11
    • 2010-09-12
    • 1970-01-01
    • 2013-03-22
    • 2010-09-24
    • 1970-01-01
    相关资源
    最近更新 更多