2009-07-30 54 views
0

我的应用程序有几个标签页,只需切换可见内容。但是,该页面还具有将页面添加制表符的链接。此外,应用程序还会记录(使用Cookie)在刷新页面时您上次查看哪个选项卡(即使使用后退和前进按钮,严格的缓存设置也会导致刷新)。JavaScript可以告诉通过后退按钮或链接离开的区别吗?

我的问题是,您第一次访问这组页面时,应该显示第一个选项卡(Tab A)。然后,您单击一个链接,并添加一个选项卡,并记住新选项卡(Tab B)。然而,如果你回击,现在看起来它什么也没做,因为它会记住并显示你最近点击的标签(表B)。

如果您点击转发到新页面,然后使用我们的应用程序历史记录返回到上一页,则记住制表符B是可取的行为。但是,如果您单击“后退”按钮,因为您希望它再次显示选项卡A,这是您首次抵达时的方式,这是不可取的。

我的问题是JavaScript onunload事件是否可以检测到离开页面与后退按钮或其他方式之间的区别。此时,我希望它忘记它为该页面记住的任何标签。

+0

你可以检查历史记录,看看上一页是否与你的相匹配? – 2009-07-30 18:17:31

回答

4

如果您尝试检测到的差异出现在用户单击链接并以其他方式从页面导航离开页面之间,则可以使用JavaScript检测链接点击,方法是将onclick事件处理程序附加到您要观察点击的每个链接上。

因此,如果onunload在没有onclick第一次触发时触发,用户将通过其他方式离开页面,而不是点击您的某个跟踪链接。

<script type="text/javascript"> 
var links = document.getElementsByTagName('a'); 
for (var i = 0; i < links.length; i++) { 
    links[i].onclick = setGlobal; 
} 
function setGlobal() { 
    window.linkClicked = true; 
} 
window.onunload = function() { 
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) { 
     // they are leaving some other way than by clicking a link 
    } 
} 
</script> 

它,如果你已经对你的<a>标签onclick事件,如果是这样的话,我可以提供一种方式来做到这一点变得有点棘手。

当然,您还可以使用jQuery或其他JavaScript库附加到所有onclick事件。

+0

创意答案,虽然在我的情况下不切实际。我们不仅有几种不同的方式可以离开页面,而是链接(主要是onclicks,还有表单提交),但是我们有很多链接,通过重构标签记忆代码可以更好地解决错误,而不是尝试注入标志进入页面上的所有链接。 – Nicole 2009-07-30 17:49:36

0

浏览器记住在该页面上进行的定时器(setTimeout调用)的状态。

第一次加载页面的onLoad将被调用,设置一个定时器,该定时器根据历史记录转发到下一页。如果你已经在最后一页,没有问题:D,如果不是,那么它将被转发。

对于IE来说,onLoad总是被调用,不管是否用后退按钮,因此你可以把相同的代码放在那里。