JavaScript能区分通过后退按钮还是链接离开吗?

JavaScript能区分通过后退按钮还是链接离开吗?,javascript,dom-events,back-button,dhtml,Javascript,Dom Events,Back Button,Dhtml,我的应用程序有多个标签页,可以简单地切换可见内容。但是,该页面也有将选项卡添加到该页面的链接。此外,应用程序会记住(使用cookies)页面刷新时最后查看的选项卡(严格的缓存设置会导致即使使用后退和前进按钮也会刷新) 我的问题是,第一次访问这组页面时,它应该显示第一个选项卡(选项卡A)。然后,单击一个链接,它会添加一个选项卡,它会记住这个新选项卡(选项卡B)。但是,如果您回击,现在它看起来好像什么也没做,因为它会记住并显示您上次单击的选项卡(选项卡B) 如果您单击“前进”到一个新页面,然后在应用

我的应用程序有多个标签页,可以简单地切换可见内容。但是,该页面也有将选项卡添加到该页面的链接。此外,应用程序会记住(使用cookies)页面刷新时最后查看的选项卡(严格的缓存设置会导致即使使用后退和前进按钮也会刷新)

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

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


我的问题是JavaScript
onunload
事件是否能够检测到使用后退按钮离开页面或其他方式之间的差异。此时,我希望它忘记它为该页面记住的任何选项卡。

如果您试图检测的差异是用户单击链接和以其他方式离开页面之间的差异,通过将
onclick
事件处理程序附加到要观察点击的每个链接,可以使用JavaScript检测链接点击

因此,如果
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>

var links=document.getElementsByTagName('a');
对于(变量i=0;i
如果您的
标记上已经有
onclick
事件,那么它会变得有点棘手,如果是这样的话,我也可以提供一种方法


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

如果您试图检测的差异是用户单击链接和以其他方式离开页面之间的差异,通过将
onclick
事件处理程序附加到要观察点击的每个链接,可以使用JavaScript检测链接点击

因此,如果
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>

var links=document.getElementsByTagName('a');
对于(变量i=0;i
如果您的
标记上已经有
onclick
事件,那么它会变得有点棘手,如果是这样的话,我也可以提供一种方法


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

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

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


对于IE,无论是否使用“上一步”按钮,都会调用onLoad,因此您可以将相同部分的代码放在那里。

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

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


对于IE,无论是否使用“后退”按钮,都会调用onLoad,因此您可以将相同部分的代码放在那里。

创造性的回答,尽管在我的情况下并不实际。与链接相比,我们不仅有几种不同的离开页面的方法(主要是onclick,也有表单提交),而且我们有太多的链接,所以通过重构标签记忆代码比尝试在页面上的所有链接中插入一个标志来更好地解决这个错误。创造性的回答,尽管在我的例子中并不实用。与链接相比,我们不仅有几种不同的离开页面的方式(主要是onclick,还有表单提交),但是我们有这么多的链接,比起试图在页面上的所有链接中插入一个标志,重构标签记忆代码可以更好地解决这个错误。你能检查历史记录看看上一页是否与你的匹配吗?你能检查历史记录看看上一页是否与你的匹配吗?