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

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

这是一个商业网页,其标准页眉和页脚包含指向公司网站上其他页面的链接。

他们有一个复杂的订单表单,尝试保存和恢复表单的状态是不切实际的。
如果在填写订单的过程中,客户需要访问网站上的另一个页面 – 查看产品等。理想情况下,我可以选择在另一个浏览器窗口或选项卡中打开链接而不是离开页面,以便用户不会丢失他们已下订单的工作。

我知道我可以使用一组不同的页眉和页脚来编写,以便在另一个窗口/选项卡中打开它们的链接,但是为了简化维护和更新,我试图最小化所使用的变体数量。 此外,用户可能想要放弃订单,如果在尝试这样做而另一个窗口打开时可能会感到困惑。

我正在使用JQuery和Javascript。

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

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

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

我使用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'); } });