如何检测用户是否尝试在新选项卡中打开链接?

丹尼尔·卢巴罗夫(Daniel Lubarov)

我正在写一个网站,所有内容都存储在JavaScript环境中,因此应该可以在“页面”之间导航而无需其他HTTP请求。

不过,我想保留用户关于链接打开方式的意图。例如,如果Mac用户apple +单击链接,则应在新选项卡中将其打开。但是,如果用户要在当前窗口中打开链接,则我想避免发出新的HTTP请求,而仅使用DOM操作来显示新内容。

这是我尝试过的方法(JSFiddle):

<a href="http://yahoo.com" id="mylink">Yahoo!</a>
document.getElementById("mylink").onclick = function() {
    alert("clicked");
    return false;
}

对于正常的左键单击和上下文菜单操作,它的行为符合预期,但对于使用修饰键的单击,则不起作用。我可以检查是否保留了某些修饰键,但这似乎很脆弱。

Twitter的网站具有与我想要的行为类似的行为-单击用户名时,通常是AJAX请求,但是如果单击并按住meta键,则会得到一个新标签。

我宁愿没有库的普通JavaScript解决方案,除非这需要一堆特定于平台的逻辑。

更新资料

我看了一下GitHub的代码,该代码也具有我所追求的行为,并且它确实检查了所持有的某些键。因此,我接受Chris的回答,因为似乎没有更好的选择。

$(document).on("click", ".js-directory-link", function (t) {
    return 2 === t.which || t.metaKey || t.ctrlKey ? void 0 : ($(this).closest("tr").addClass("is-loading"), $(document.body).addClass("disables-context-loader"))
}
克里斯·贝克

您可以检查ctrlKeyshiftKey以及metaKey事件对象的属性。如果为真,则按住键控制,Shift或meta(Apple的命令)键,并且您应允许继续执行默认的链接操作。否则,您preventDefault可以停止链接操作并改用javascript处理它。

添加target="_blank"到锚标记中,因此默认链接行为是打开一个新选项卡。否则,它将在当前页面顶部打开(可能需要)。

这是两种方式的javascript:

document.getElementById("mylink").onclick = function(evnt) {
    if (
        evnt.ctrlKey || 
        evnt.shiftKey || 
        evnt.metaKey || // apple
        (evnt.button && evnt.button == 1) // middle click, >IE9 + everyone else
    ){
        return;
    }
    evnt.preventDefault();

    alert("clicked");
    return false;
}

小提琴:http : //jsfiddle.net/6byrt0wu/

文献资料

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用户单击时在新选项卡中打开链接

来自分类Dev

询问用户是否应在外部窗口/选项卡中打开外部链接

来自分类Dev

Joomla-是否可以从控制器的新选项卡中打开链接

来自分类Dev

右键单击并保存链接以在新选项卡中打开

来自分类Dev

JS Jquery - 在新选项卡中打开链接

来自分类Dev

如何使用javascript和jquery中的<a>标记在新选项卡中打开链接

来自分类Dev

如何强制动态对象中的链接在新选项卡中打开?

来自分类Dev

如何在新选项卡中打开选择超链接

来自分类Dev

如何使用Selenium WebDriver在新选项卡(chrome)中打开链接?

来自分类Dev

JavaScript:如何在没有window.open()的新选项卡中打开链接?

来自分类Dev

如何在新选项卡中打开Kendo网格超链接列?

来自分类Dev

如何在引导网格内的新选项卡中打开此链接

来自分类Dev

如何在 Ruby on Rails ActiveAdmin 的新选项卡中打开 CSV、PDF 下载链接?

来自分类Dev

如何使用 python 和 selenium 在新选项卡中打开链接

来自分类Dev

如何让链接打开Bootstrap模态中的特定选项卡?

来自分类Dev

如何从GridView在新选项卡中打开页面?

来自分类Dev

如何从GridView在新选项卡中打开页面?

来自分类Dev

如何从GridView在新选项卡中打开页面?

来自分类Dev

python selenium在新选项卡中打开链接,并在新选项卡中继续会话

来自分类Dev

(单击事件后)如何在每次打开后延迟打开新选项卡中的链接列表

来自分类Dev

(单击事件后)如何在每次打开后延迟打开新选项卡中的链接列表

来自分类Dev

如何通过右键单击新选项卡中的“转到网址”来打开网页中的文本作为链接

来自分类Dev

在新选项卡中打开外部链接但排除某些链接

来自分类Dev

Chrome 扩展程序:如何通过单击 html 弹出窗口中的按钮在新选项卡中打开指定链接?

来自分类Dev

在新的Outlook Web Mail中,如何限制未在新选项卡中打开的选项?

来自分类Dev

如何将servlet重定向到新选项卡并在新选项卡中打开Excel

来自分类Dev

即使用户单击“中间按钮”或右键单击->在新选项卡中打开,如何触发jquery“单击”事件

来自分类Dev

即使用户单击“中间按钮”或右键单击->在新选项卡中打开,如何触发jquery的“ click”事件

来自分类Dev

Xpages链接打开“新浏览器”选项卡

Related 相关文章

  1. 1

    用户单击时在新选项卡中打开链接

  2. 2

    询问用户是否应在外部窗口/选项卡中打开外部链接

  3. 3

    Joomla-是否可以从控制器的新选项卡中打开链接

  4. 4

    右键单击并保存链接以在新选项卡中打开

  5. 5

    JS Jquery - 在新选项卡中打开链接

  6. 6

    如何使用javascript和jquery中的<a>标记在新选项卡中打开链接

  7. 7

    如何强制动态对象中的链接在新选项卡中打开?

  8. 8

    如何在新选项卡中打开选择超链接

  9. 9

    如何使用Selenium WebDriver在新选项卡(chrome)中打开链接?

  10. 10

    JavaScript:如何在没有window.open()的新选项卡中打开链接?

  11. 11

    如何在新选项卡中打开Kendo网格超链接列?

  12. 12

    如何在引导网格内的新选项卡中打开此链接

  13. 13

    如何在 Ruby on Rails ActiveAdmin 的新选项卡中打开 CSV、PDF 下载链接?

  14. 14

    如何使用 python 和 selenium 在新选项卡中打开链接

  15. 15

    如何让链接打开Bootstrap模态中的特定选项卡?

  16. 16

    如何从GridView在新选项卡中打开页面?

  17. 17

    如何从GridView在新选项卡中打开页面?

  18. 18

    如何从GridView在新选项卡中打开页面?

  19. 19

    python selenium在新选项卡中打开链接,并在新选项卡中继续会话

  20. 20

    (单击事件后)如何在每次打开后延迟打开新选项卡中的链接列表

  21. 21

    (单击事件后)如何在每次打开后延迟打开新选项卡中的链接列表

  22. 22

    如何通过右键单击新选项卡中的“转到网址”来打开网页中的文本作为链接

  23. 23

    在新选项卡中打开外部链接但排除某些链接

  24. 24

    Chrome 扩展程序:如何通过单击 html 弹出窗口中的按钮在新选项卡中打开指定链接?

  25. 25

    在新的Outlook Web Mail中,如何限制未在新选项卡中打开的选项?

  26. 26

    如何将servlet重定向到新选项卡并在新选项卡中打开Excel

  27. 27

    即使用户单击“中间按钮”或右键单击->在新选项卡中打开,如何触发jquery“单击”事件

  28. 28

    即使用户单击“中间按钮”或右键单击->在新选项卡中打开,如何触发jquery的“ click”事件

  29. 29

    Xpages链接打开“新浏览器”选项卡

热门标签

归档