2014-10-20 82 views
0

我知道我可以使用onunload的当用户退出的页面做一些事情,问题是,它的用户是否离开页面,重新加载,关闭页面等Javascript:如何检查用户是否更改域名?

我只需要运行一个脚本当用户离开我的网页到另一个域名时,例如:

如果用户在www.exemple.com/here并转至www.exemple.com/,则不会发生任何事情,但如果他从www.exemple .com /这里www.anotherdomain.com/然后脚本应该运行。

这样做的最佳方法是什么?

至于为什么,我需要的是,这里的故事:

我有Google标记工作,我需要在会议结束时启用标记。会话仅在用户关闭窗口或离开网站域时结束。如果他重新加载或者如果站点内的停留,标签不应该触发。

+0

我很好奇你为什么需要这个。 – akonsu 2014-10-20 13:34:57

+2

联系所有适用的页面上的链接/表单,点击/提交时设置全局,并在onunload中检查它。 – 2014-10-20 13:37:50

回答

3

我需要这样的东西我自己。我通过在完全加载页面后运行特殊功能来解决它​​。此功能将单击事件处理程序附加到检查链接指向的所有<a>元素,并根据链接目标设置标志。这个标志在我的onunload函数中被检查过,所以我可以决定是否显示警告。

但这是一个非常特殊的实现。这对手动页面更改(用户输入URL)或javascript位置更改不起作用。

不幸的是,我没有源代码了,但它可能是这样的(使用jQuery):

var leaving = false; 

$(function() { 
    $('a').click(function() { 
     leaving = !$(this).attr('href').match(/regex/); 
    }); 
}); 

$(window).bind('beforeunload', function() { 
    return leaving ? 'Really want to leave the page?' : null; 
}); 

(未测试!)

编辑:亚历克斯K.在评论中建议,你也可以勾选表格,而不仅仅是链接。

+0

我想这也适用于手动网址更改,因此+1这个答案 – Mihir 2014-10-20 14:01:36

+1

另外一件事情要注意,在beforeunload事件hanler中显示的消息将不会显示在Firefox中 – Mihir 2014-10-20 14:05:48

+0

@Mhhir呃,这是正确的 - 不幸的。至少Firefox会显示一条消息,指出您可能会丢失数据,并且您可以在事件处理程序中执行一些清理任务。 – fero 2014-10-20 14:10:26

0

似乎无法获得您的域外部的下一个URL,您可以检查片段标识符参数ex中的更改; yourpage.html#sectionayourpage.html#sectionb使用window上的事件onhashchange。尝试以下脚本。 请注意,这个JS将在现代浏览器IE8上工作。

<!DOCTYPE html> 
    <html> 
    <head> 
    <script> 
    window.start = function(){ 
     var url = "http://www.yoursite.com"; 
     if ("onhashchange" in window) { 
     alert("The browser supports the hashchange event!"); 
     } 

     function locationHashChanged() { 
     if (location.hash != url) { 
      alert('change url'); 
     } 
     } 

     window.onhashchange = locationHashChanged; 
     } 
    </script> 

    </head> 
    <body onload="window.start();"> 
    </body> 
    </html>