0

我的应用程序有几个选项卡的页面,这些选项卡可以简单地切换可见内容。但是,该页面还具有将选项卡添加到页面的链接。此外,应用程序会记住(使用 cookie)您上次查看的选项卡,以防页面被刷新(即使使用后退和前进按钮,严格的缓存设置也会导致刷新)。

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

如果您单击前进到新页面,然后使用我们的应用程序内历史记录返回上一页,则记住选项卡 B 是理想的行为。但是,如果您单击后退按钮是不可取的,因为您希望它再次显示选项卡 A,就像您第一次到达时那样。

我的问题是 JavaScriptonunload事件是否可以检测到使用后退按钮或其他方式离开页面之间的区别。在这一点上,我希望它忘记它为该页面记住的任何选项卡。

4

2 回答 2

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>

onclick如果您的标签上已经有事件,它会变得有点棘手<a>,如果是这种情况,我也可以提供一种方法来做到这一点。

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

于 2009-07-30T17:37:58.220 回答
0

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

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

对于 IE,onLoad 总是被调用,无论是否带有后退按钮,因此您可以将相同部分的代码放在那里。

于 2009-07-30T18:37:06.417 回答