当我们打开右键单击时,JS onClick不执行 - >在新标签页中打开

时间:2013-06-18 11:41:58

标签: javascript

我在元素中有一些onClick事件,因此它们被调用 当用户点击链接时 这很好用,看起来像这样:

FOO

不幸的是,如果用户在新标签页中打开链接(例如右侧) 点击 - >在新标签页中打开),我的onLinkClick函数不会被调用。 这种情况发生在Firefox(各种版本,包括最新版本 - 1.5.0.1)。

有没有人知道是否有办法解决这个问题并抓住它 “在新标签页中打开”点击/活动?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要使用preventDefault方法进行右键单击。

在jQuery中你可以这样做:

$(document).on("mousedown", "a", function(e) {
   if( e.which === 3 ) {
      e.preventDefault();
      //do something now
   }
});

左键单击1,中键单击2,右键单击3。

在JavaScript中:

<a href="#" onmousedown="mouseDown(event);">aaa</a>​​​​​​​​​​​​​​​​​​​​​​​​​​​

function mouseDown(e) {
  e = e || window.event;
  switch (e.which) {
    case 1: alert('left'); break;
    case 2: alert('middle'); break;
    case 3: alert('right'); break; 
  }
}​

Demo

答案 1 :(得分:0)

所以我遇到了这个问题,得出的结论是,修改用户行为以禁止在台式机和移动设备的新标签页和上下文菜单中打开是可行的方法。

另一种选择是使用令人讨厌的查询字符串以内部重定向链接格式来混淆外部链接。必须在用户体验透明性方面做到数字,所以我将定位标记直接链接到外部资源。

您可以通过以下方式阻止单击并按住以及右键单击桌面上的移动设备上的选择和标注:

您希望人们点击的锚点上的CSS修改器:

while 1:
    inkey, inunicode = get_key()

    if inkey == K_BACKSPACE:
        # [...]

    elif inunicode  in rest:
        current_string.append(inunicode)

在文档加载时添加此事件侦听器:

a {
    -webkit-user-select: none; /* disable selection/Copy of UIWebView */
    -webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */
}

现在所有点击都将通过onClick,因为在80%的情况下,人们无法在新标签页中打开,他们只能点击。乍一看,人们可能会感到困惑,但是尽管您有逻辑上的期望,但是尽管可以在onClick处理程序中使用preventDefault()锚定标记并启动用户分析,但您仍然可以在下一个URL上保留清晰的链接,这是您的好处。 :)

将于2020年12月在iPhone iOS 14和Android 9以及Windows 10的Chrome和Firefox上运行。