Javascript:如何检查用户是否更改域名?

时间:2014-10-20 13:30:55

标签: javascript

我知道当用户退出页面时我可以使用onunload来执行某些操作,问题是无论用户是离开页面,重新加载,关闭页面等都能正常工作。

我只有在用户将我的页面留到另一个域时才需要运行脚本,例如:

如果用户在www.exemple.com/here并访问www.exemple.com/,则不会发生任何事情,但如果他从www.exemple.com/here访问www.anotherdomain.com/那么脚本应该运行。

最好的办法是什么?

至于我为什么需要这个,这就是故事:

我使用googleTagManager,我需要在会话结束时触发标记。会话仅在用户关闭窗口或离开站点域时结束。如果他重新加载或停留在网站内,标签不应该开火。

2 个答案:

答案 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#sectionayourpage.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>