3

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

问题是,我想确保当某些用户右键单击链接时,链接看起来仍然合法,但是当他选择在新选项卡中打开链接时,我会捕获该事件并更改 href。最后,当链接上发生实际的点击事件时,href 会变回原来的。他们实际去的网址,做了一些事情并将他们重定向到真正的网址,但它发生得非常快。所以这个功能的目标是欺骗用户并跟踪他们的点击。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 将显示在浏览器角落,我该如何绕过?

4

3 回答 3

4

您不能这样做,或者您可以为您的网址制作右键单击事件:)

jQuery如何区分鼠标左键单击和右键单击

于 2013-04-11T09:23:27.320 回答
2

我使用了“contextmenu”,它帮助我在鼠标右键单击时更改了所有 url。

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

它还负责在新窗口中打开,复制链接等。

于 2016-07-28T14:32:52.000 回答
-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 事件附加到链接(当用户右键单击链接并打开浏览器上下文菜单时触发事件)。

  2. 添加您的逻辑以在此处更改 href。这样,当他们单击它时,它就会到达您想要的位置。

  3. 在您更改的链接上添加 mousedown 或 hover 事件,以确保在他们将鼠标悬停在链接上时更正格式。不是每个人都需要这一步,但你需要(这完全取决于你想要达到的目标,所以找出最适合你的情况)

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

于 2018-06-05T21:54:00.620 回答