我知道当用户退出页面时我可以使用onunload来执行某些操作,问题是无论用户是离开页面,重新加载,关闭页面等都能正常工作。
我只有在用户将我的页面留到另一个域时才需要运行脚本,例如:
如果用户在www.exemple.com/here并访问www.exemple.com/,则不会发生任何事情,但如果他从www.exemple.com/here访问www.anotherdomain.com/那么脚本应该运行。
最好的办法是什么?
至于我为什么需要这个,这就是故事:
我使用googleTagManager,我需要在会话结束时触发标记。会话仅在用户关闭窗口或离开站点域时结束。如果他重新加载或停留在网站内,标签不应该开火。
答案 0 :(得分:3)
我自己需要这样的东西。我在完全加载页面后运行一个特殊的函数解决了它。此函数将click事件处理程序附加到所有<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;
});
(未经测试!)
编辑: 正如Alex K.在评论中建议的那样,您也可以挂钩表单,而不仅仅是链接。
答案 1 :(得分:0)
似乎无法在您的域外部获取下一个URL,您可以检查片段标识符参数ex中的更改; yourpage.html#sectiona
或yourpage.html#sectionb
使用onhashchange
上的事件window
。请尝试以下脚本。
请注意,这个JS将适用于现代浏览器IE8&gt;。
<!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>