如何检测用户何时离开我的网站,而不仅仅是去另一个页面?

我有onbeforeunload的处理程序

window.onbeforeunload = unloadMess; function unloadMess(){ var conf = confirm("Wait! Before you go, please share your stories or experiences on the message forum."); if(conf){ window.location.href = "http://www.domain.com/message-forum"; } } 

但我不知道如何知道他们点击页面上的url是否在网站内。

我只是希望他们提醒他们是否会离开网站。

100%可靠地执行此操作是不可能的,但如果您检测到用户何时单击了页面上的链接,则可以将其用作最正确的信号。 像这样的东西:

 window.localLinkClicked = false; $("a").live("click", function() { var url = $(this).attr("href"); // check if the link is relative or to your domain if (! /^https?:\/\/./.test(url) || /https?:\/\/yourdomain\.com/.test(url)) { window.localLinkClicked = true; } }); window.onbeforeunload = function() { if (window.localLinkClicked) { // do stuff } else { // don't } } 

我有一个想法,但我不知道它是否有效。 我的建议是,使用函数调用为每个链接添加一个onClick事件。 该函数只读取href属性并存储到具有全局范围的变量中。

 var clickedHrefAttrValue = ""; function getClickUrl(currentLink) { clickedHrefAttrValue = $(currentLink).attr("href"); return true; } 

a标签的html必须如下所示:

 Linktext 

并在您的给定function:

 function getClickUrl() { if (clickedHrefAttrValue.indexOf("" > -1) { //what ever you want do to } } 

这只是一个想法,但我认为值得尝试。

如果由于您的网站可能同时具有绝对和相对本地链接而遇到问题,我有另一种解决方案(使用jQuery):

演示

 /* EXTERNAL LINK WARNING =========================================*/ $('a').on('click', function(e){ e.preventDefault(); var url = $(this).attr('href'), host = location.host; if (url.indexOf(host) > -1 || url.indexOf('http','https') == -1){ /* If we find the host name within the URL, OR if we do not find http or https, meaning it is a relative internal link */ window.location.href = url; } else { var warn = confirm('You\'re leaving the domain.\n\nAre you sure?'); if(warn == true) { window.location.href = url,'_blank'; } else { e.preventDefault; } } }); 

我最近在我的网站上实现了一个很好的解决方案。 想象一下,在您的网站中导航用户的所有内容都将是链接(锚标记),按钮,可点击图像或这些行上的某些内容。 它绝对不会成为身体元素。

现在当用户离开网站时会发生什么,他/她可以输入url并按Enter键,单击书签或按后退/前进按钮。

当用户执行此操作时,请执行以下操作:

 $(window).on('beforeunload', function(e)){ if(e.target.activeElement.nodeName.toLowerCase() == 'body'){ yourFunction(); }); 

在这些情况下(当用户离开网站时)身体成为目标中的活动元素,而当用户点击内部网站可导航元素时则不是这种情况。

这是一个干净,简单的解决方案。 如果您遇到任何问题,请告诉我。