【发布时间】:2018-01-01 10:29:18
【问题描述】:
有时在我的网络应用程序上,如果点击应该打开一个新窗口或标签,我想禁止点击事件侦听器。例如,我的单页应用程序具有指向另一个内容的链接。他们工作得很好,但有一个问题。如果用户单击此类链接,进行特殊单击以打开新选项卡/窗口(比如说 cmd ⌘ + 在 Mac 上单击),我不想触发事件侦听器。
通常我会这样做:
<a href="/music">Music</a>
<a href="/games">Games</a>
<a href="/about-us">About Us</a>
<a href="/contact">Contact</a>
还有一些 jQuery 魔法:
$("a[href]").click(event => {
if (event.metaKey || event.shiftKey) {
// Let browser handle that normally if cmd or shift is pressed
return true;
}
let uri = $(event.target).attr("href");
// My viewPage(uri) function displays content by href
viewPage(uri);
return false;
});
它按预期工作 - 每当使用鼠标 + 键盘快捷键打开新选项卡/窗口时,当前选项卡不受影响并出现新选项卡/窗口。
这里的问题是假设 cmd ⌘ + click 或 shift + click 实际上是快捷方式。对于不同的浏览器和系统,它们可能会有所不同。
所以这是我想问的问题:有没有可靠的方法来检测 JavaScript 中的选项卡/窗口打开请求?我发现这个功能相当重要。至少重要到可以关心。
【问题讨论】:
-
它有什么帮助?这比我已经得到的想法更糟糕。
-
你可以在this post找到有趣的评论。然而,可能不是您正在寻找的解决方案。
-
@bigless 这不是我问题的答案。我知道如何阅读钥匙。问题是是否触发了一些特殊事件或其他技术来捕捉即将打开的窗口/选项卡。我不认为跟踪所有浏览器和所有系统中的所有快捷方式是最好的主意,尤其是某些浏览器可能允许更改快捷方式按钮。
-
如果您保留当前代码,则必须添加
event.ctrlKey(在 Windows 上,它会在 Chrome、Firefox 和 Opera 中打开一个新标签页)。
标签: javascript jquery html browser