在jQuery中检测链接的鼠标右键"在新标签页中打开"?

5

我希望我的链接看起来像合法的URL,但在单击事件发生时会有不同的行为,例如转到我定义的跟踪URL。当我使用鼠标左键单击链接时,可以使用.click()处理程序捕获它并将href更改为其他内容。当我右键单击时,.click()无法捕获它,但是我可以使用.mousedown()和.mouseup(),这只是解决我的问题的一部分。

问题在于,我想确保当某个用户右键单击链接时,链接仍然看起来合法,但当他选择在新标签页中打开链接时,我会捕获该事件并更改href。最终,当实际单击事件发生在链接上时,href将被更改回原始状态。他们实际访问的URL执行某些操作并将其重定向到真正的URL,但这发生得非常快。因此,此功能的目的是欺骗用户并跟踪他们的点击。Facebook也这样做,但是他们如何处理右键单击和“在新标签页中打开”呢?

好吧,没有代码,我想我无法继续了......当前我拥有的一些代码:

    link = $(selectorName);
    var original_link = link.attr("href");
    link.click(function(){
        link.attr("href", "/track_and_redirect");
    }).mousedown(function(event) {
        switch (event.which) {
            case 3:
                //alert('Right mouse button pressed');
                link.attr("href", "/track_and_redirect");
                break;
            default:
        }
    }).mouseleave(function(){
        link.attr("href", original_link);
    });

目前,当您右键单击链接时,新的URL将显示在浏览器角落中,我该如何绕过这个问题?


1
你是说你想要发送给他们的实际链接不是“合法”的吗? - musefan
1
"我希望我的链接看起来像合法的URL,但行为不同,比如转到我定义的某个跟踪URL"。 不要这样做。 就像Google在搜索结果页面上所做的那样:使链接指向一个重定向到目标的跟踪页面。(即使他们所做的有点邪恶,因为当你悬停在链接上时,在状态栏中看到的不是你要访问的真实链接,而是被覆盖的状态文本。)" - T.J. Crowder
为什么会有负评?是有些地方不清楚吗?没有做过研究吗?不需要情绪化。@musefan:它们将被重定向到跟踪URL,但链接本身需要看起来像直接指向目标URL。 - user663381
实际上我查了一下谷歌,如果你搜索某个东西并悬停在链接上,你会看到目标URL,尝试右键点击它并不做任何事情,再次悬停在链接上,URL就会改变。所以他们不会在右键点击后将其改回原始状态。这是我现在的解决方案,但并不是理想的解决方案。 - user663381
3
就我所知,我同意你关于“踩”的观点。踩不是用来反对别人意图的。但人终究是人。 :-) - T.J. Crowder
3个回答

4

3

我使用了 "contextmenu",它帮助我在鼠标右键单击时更改了所有的URL。

$('#help').on('click contextmenu', "a", function(event) {
  $(this).attr('href','my_new_url');
  $(this).attr('target', '_blank');
});

它还可以处理在新窗口中打开、复制链接等操作。

-1
$(".links").contextmenu(function(event){
    // your logic to change the href here
    $(this).attr('href', '...');
    // don't forget to attach event to recover your old link back if you need it
    attachMouseDown($(this));
});

function attachMouseDown($el){
    $el.mousedown(function(event){
        // recover your links
        $el.attr('href', '...');
        $el.unbind('mousedown'); // this is so you don't run this event when you don't need to
    });
}

我刚在这篇文章上回答了一个类似的问题:

如何在JavaScript中捕获在新标签页中打开链接的事件?

请查看一下。

以下是我在您的情况下会做的事情:

  1. 将contextmenu事件附加到链接上(当用户右键单击链接时触发该事件,并打开浏览器contextmenu)。

  2. 添加逻辑以更改href。这样,当他们单击它时,它会带到您想要的地方。

  3. 在您更改的链接上添加mousedown或hover事件,以确保在他们悬停在其上时正确更正格式。并非每个人都需要此步骤,但您需要(这完全取决于您想要实现什么,因此请确定在您的情况下最好的事件)

  4. 格式更正后,您可以取消绑定mousedown或任何其他事件。


请不要在其他 Stack Exchange 问题中发布仅包含链接的答案。相反,包括答案的基本部分,并将答案调整为此特定问题 - Machavity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接