如何在javascript onbeforeunload事件中获取网页上链接的目标网址?

时间:2013-11-06 04:21:55

标签: javascript jquery javascript-events onunload

是否可以捕获用户点击的网页上的链接? 不是在谈论他们是否在地址栏中手动输入了网址,或者他们是否点击了后退按钮 - 而是当前页面上的现有链接或菜单项。

这适用于具有标准标题和标题的商业网页。页脚包含指向公司网站上其他页面的链接。

他们有一个复杂的订单形式,尝试保存&恢复表格的状态 如果在填写客户需要访问其他网页上的网站下订单的过程 - 审查产品等。理想情况下,我将能够提供开放的链接在另一个浏览器窗口或标签,而不是离开的选择页面,这样用户就不会失去他们订购的工作。

我知道我可以拥有一套不同的标题&写入的页脚是为了在另一个窗口/选项卡中打开它们的链接,但是为了简化维护和更新我正在尝试尽量减少使用的变体数量。此外,用户可能想要放弃订单,如果试图这样做,可能会混淆另一个窗口。

我正在使用JQuery&的JavaScript。

2 个答案:

答案 0 :(得分:0)

您可以使用在新窗口中打开的链接替换某些区域中的所有链接,而不是使用完全不同的页眉/页脚集:

$('#header a, #footer a').each(function() {
  $(this).attr('target', '_blank');
});

答案 1 :(得分:0)

这就是我想出来处理这个问题,它对我有用 检测用户何时单击页面链接,然后评估链接以确定如何正确处理。 它不适用于在浏览器地址栏中输入的链接。

我使用jquery magnific-popup(http://dimsemenov.com/plugins/magnific-popup/)创建一个弹出窗口(我的代码中的.popupForm-handleExitRequest),为用户提供在同一窗口中打开链接(并丢失其订单数据)的选项,在新窗口或返回订单表格。

$('body a').click(function(e) {     
    //if link is reference to page element
    if ($(this).attr('href').charAt(0)=="#") {
        return;
    }

     //check if link is to same window    
     var pathname = window.location.pathname;
     var pathname2 = $(this).attr('href');
     pathname2 = pathname2.replace(/^.+\.\//, '');
     if (pathname.indexOf(pathname2) >= 0) {
        //link clicked is contained on same page
        //prevent page from getting reloaded & losing data
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();    
        return;     
    }

    //link clicked on is another page
    if (hasMerchandise) {  //var to indicate user has items on order form       
        //give user options: leave page, open link in other page, stay, etc.
        // $('.popupForm-handleExitRequest').click();   //roll your own code    

        //prevent page from getting reloaded & losing data
        //in case user wants to cancel page change or open link in another window
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();            
    } else {
        //load new page
        $(this).removeAttr('target');
    }       
});