检测右击';s";“在新选项卡中打开”;关于jQuery中的链接?

检测右击';s";“在新选项卡中打开”;关于jQuery中的链接?,jquery,events,mouse,Jquery,Events,Mouse,我希望我的链接看起来像合法的url,但当点击事件发生时,行为会有所不同,比如转到我定义的某个跟踪url。 当我用鼠标左键单击链接时,我可以用.click()处理程序捕捉它,并将href更改为其他内容。当我右键单击时,它不会被.click()捕获,但我可以使用.mousedown()和.mouseup(),这只是我问题的部分解决方案 问题是,我想确保当一些用户右键单击链接时,链接看起来仍然合法,但当他选择在新选项卡中打开链接时,我会捕捉该事件并更改href。最后,当链接上发生实际的单击事件时,hr

我希望我的链接看起来像合法的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将显示在浏览器的一角,我如何绕过它?

您不能这样做,或者您可以为您的url创建右键单击事件:)

我使用了“上下文菜单”,它帮助我在鼠标右键单击时更改所有url

$('#help').on('click contextmenu', "a", function(event) {
  $(this).attr('href','my_new_url');
  $(this).attr('target', '_blank');
});
它还负责在新窗口中打开、复制链接等

$(".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
    });
}
我刚刚在这篇帖子上回答了一个类似的问题

请检查一下

这是我在你的情况下要做的

  • 将contextmenu事件附加到链接(当用户右键单击链接并打开浏览器contextmenu时,会触发偶数)

  • 添加您的逻辑以更改href。这样,当他们点击它时,它就会到达你想要的地方

  • 在更改的链接上添加mousedown或hover事件,以确保在链接悬停在其上时更正格式。不是每个人都需要这一步,但你确实需要(这完全取决于你想要实现什么,所以找出哪一步对你来说是最好的)

  • 更正格式后,可以解除鼠标向下或任何其他事件的绑定


  • 你是说你想发送给他们的实际链接不是“合法”的吗?“我希望我的链接看起来像合法的url,但行为不同,比如转到我定义的某个跟踪url“不”。别这样。做谷歌在搜索结果页面上做的事情:让链接将你带到一个重定向到目标的跟踪页面。(甚至他们所做的也有点邪恶,因为当你悬停链接时,你在状态栏中看到的不是你要访问的真正链接,而是覆盖了状态文本。)为什么投票被否决?有什么不清楚的吗?没有研究工作?没必要情绪化地接受这个@穆塞凡:它们将被定向到跟踪url,但链接本身需要看起来像是直接指向目标url。事实上,我检查过谷歌,如果你搜索某个东西并将鼠标悬停在链接上,你会看到目标url,尝试右击它,但什么都不做,再次将链接悬停,url就会改变。因此,在右键单击之后,他们不会将其更改回原始状态。这就是我现在所拥有的,但这不是理想的解决方案。@IndrekR:FWIW,我同意你关于反对票的看法。向下投票不是因为不同意某人的意图。但人就是人。:-)请不要发布仅链接其他堆栈交换问题的答案。取而代之的是,在这里包括答案的基本部分,并根据这个具体问题定制答案。