如何在onbeforeunload事件中捕获目标URL

时间:2010-10-03 09:32:10

标签: javascript javascript-events

我想在离开某些页面之前使用onbeforeunload向用户发送消息。 是否有可能知道他们应该在onbeforeunload事件中跳转到哪个网址?

由于

2 个答案:

答案 0 :(得分:5)

  

是否有可能知道他们应该在onbeforeunload事件中跳转到哪个网址?

不,绝对不是。 onbeforeunload事件仅告诉您该页面即将被卸载,但不是为什么。

答案 1 :(得分:2)

这取决于用户离开页面的方式。 如果他们在地址栏中输入网址 - 那么你就不走运了。据我所知,没有办法捕获地址栏跳转的网址。

如果他们点击页面上某处包含的链接 - 您可以使用click事件捕获网址,然后决定如何处理内容。

我提出了类似的问题 How can i get the destination url of a link on the web page in the javascript onbeforeunload event?
因为我有一个项目来修理批发订单。在填写订单的过程中,我的客户的客户将返回目录检查产品的详细信息页面,并在订单上放弃当前信息。
通过使用下面的代码(虽然我确定你可以在纯Javascript中创建相同的东西,但是如果必须的话),我可以告诉用户何时点击了一个链接,该链接将保留订单,然后给他们选项在新窗口/选项卡中打开链接或在当前窗口中加载URL并丢失其表单数据,或者只返回到表单。此代码适用于所有主流浏览器,至少是最近的版本。

$('body a').click(function(e) {     
    //if link references a 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');
    }       
});