Jquery 检测用户是否希望在新窗口或选项卡(Mac和Windows)中打开链接

Jquery 检测用户是否希望在新窗口或选项卡(Mac和Windows)中打开链接,jquery,browser,onclick,Jquery,Browser,Onclick,我有一个链接,为了优化页面响应/流量,我使用javascriptclick处理程序处理它的click事件。在上单击,我只加载页面的部分内容。但是链接的URL是正确的,在独立选项卡中打开它可以正确打开页面 但是,当用户按下CMD键并单击链接(以在新选项卡中打开链接)时,Click处理程序运行,页面在新选项卡中未打开。基本上我禁用了CMD Click(在新选项卡中打开)功能。如何在代码中检测到这一点,以使CMD Click按预期工作。(在Windows中,CMD替换为Ctrl。) 我是否必须编写特定

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

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


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

检查
事件的
ctrlKey
shiftKey
metaKey
属性。这些命令告诉您用户是否分别持有控制、移位或命令。还要检查
哪个
不是
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
});

要在新选项卡中使用鼠标右键/打开,您会做什么?鼠标滚动点击?按住Shift键并单击?@YuryTarabanko:
事件。哪个
可以处理中键单击。右键单击并选择“在新选项卡中打开”不会首先触发事件处理程序。@josh3736我相信有更好的方法来判断是否需要加载整个页面。也许
X-Requested-With
header会帮你做一些小把戏:有很多键可以改变默认行为,而不仅仅是
ctrl
。你最好用类似的东西来处理它。
$(".link").on("click", function(event) {

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

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