浏览器通过以下方式提供客户端会话中访问过的页面列表window.history
目的。这样,客户端代码可以在列表中向前和向后导航(使用history.back()
, history.forward()
, and history.go()
).
但是客户端代码如何确定where当前页面位于历史记录中?例如,如果客户端访问页面 A、B 和 C,历史记录将包含三个项目,当前历史记录项目(或状态)将针对页面 C。如果用户随后单击“后退”按钮,则当前历史记录项目(或状态)将针对页面 C。页面现在是 B。但是,history.length
仍然是 3,反映了总共访问了 3 个页面的事实。我们如何确定客户端当前处于历史记录中的第 2 项?
一个更具体的问题是,我想确定我是否位于历史记录中的第一项,以便我可以显示一个“关闭”按钮,该按钮将关闭页面(假设window.opener
不为空);在历史记录中的任何其他位置,我想显示一个“后退”按钮,它将导航到上一页。
这似乎是一个奇怪的遗漏,历史对象中没有“当前索引”。
注意:这类似于问题#12895940 https://stackoverflow.com/questions/12895940,但不同之处在于我实际上只需要知道我是否位于历史上的第一个位置。
我唯一想到的(仅适用于 HTML5+ 浏览器)是这样的:
// Onload
{
if (!history.state && typeof(history.replaceState) == "function")
history.replaceState({ page: history.length, href: location.href }, "foo");
}
当页面首次加载时,这会将状态对象推送到历史堆栈上。 (这typeof
需要检查以确保浏览器支持 HTML5replaceState()
方法。)
稍后,我可以检查当前历史对象是否是列表中被替换的第一个:
if (history.state && history.state.page == 1) {
// It appears that we are positioned at the first history item
...
}
这似乎足以满足我的需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)