如何在javascript中捕获新选项卡事件中打开的链接?

如何在javascript中捕获新选项卡事件中打开的链接?,javascript,jquery,Javascript,Jquery,我能够捕获右键单击事件,但我想知道的是如何捕获右键单击后发生的“在新选项卡中打开链接”我正面临着同样的问题。这就是我想出的解决办法。 当上下文菜单在我感兴趣的链接上打开时,我会听它,并更改href值 $(".my-links").contextmenu(function(event){ // your logic here // for me it was to add the portocal + "://" + hostname + "/#" + value

我能够捕获右键单击事件,但我想知道的是如何捕获右键单击后发生的“在新选项卡中打开链接”

我正面临着同样的问题。这就是我想出的解决办法。 当上下文菜单在我感兴趣的链接上打开时,我会听它,并更改href值

$(".my-links").contextmenu(function(event){
        // your logic here 
        // for me it was to add the portocal + "://" + hostname + "/#" + value of the original link
        var $link = $(this);
        var href = $link.attr('href');
        // Check if I have already done this
        if(href.includes('/#'))
            return true; // return if it doesn't need editing
        var url = window.location.href;
        url = url.split("/");
        url = url[0]+'//'+url[2];
        $link.attr('href', url + '/#' + href);
    });
现在,您可以选择执行一些操作以从此操作中恢复。这完全取决于你的情况和你想做什么。对我来说,我需要将href恢复到正常点击时的原始值,因为我使用ajax加载页面,并且我只需要“/#”之后的部分(这是加载函数需要的,我无法控制更改该函数) 这就是我所做的

$(".my-links").click(function(event){
        // your logic goes here
        // for me it was to remove portocal + "://" + hostname + "/#" (if they exist)
        event.preventDefault();
        var $link = $(this);
        var href = $link.attr('href');
        if(!href.includes("/#"))
            return ajaxLoad(href); // the function used to load the page with ajax
        var url = href.split("/#");
        ajaxLoad(url[url.length-1]); // the function used to load the page with ajax
    });
这条长线应该适合你

  • 听contextmenu事件并执行逻辑

  • 如果需要恢复更改,请找出最合适的事件来恢复更改(如果更改已发生),并执行恢复过程


  • 恐怕不可能。上下文菜单中的事件本身是否比JS访问的级别低。您有什么建议?基本上,左键单击打开的链接是使用js动态创建的。但在右键单击并在“新建”选项卡中打开时,链接不会更新。原始href属性的值为“#”。在这种情况下,您需要在DOM中设置实际的
    href
    属性,而不是在元素的
    click()
    上计算它。或者,您可以在
    单击
    上下文菜单
    事件处理程序中设置
    href