window.history(windowhistoryreplaceState)
- 百科
- 2023-02-20 08:47:49
- 140
本篇文章给大家谈谈window.history,以及windowhistoryreplaceState对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、window.history.length的大坑
- 2、window.history
- 3、window.history 方法总结
- 4、window.history可以清空吗
- 5、window.history 页面栈的回退问题
window.history.length的大坑
这个大坑就是:不要用window.history.length确定是否还能继续回退。
如果你访问了三个页面,然后又点回退按钮,退回来,退到第一个页面,请问,window.history.length此时是几?
是1?错!是3!这就是坑爹的地方,你无法根据window.history.length确定是否还能继续回退。
当然了,如果window.history.length是1,那么肯定是不能回退了,但是大于1,你就不敢说能不能继续回退。
那么,究竟怎样判断是否还能继续回退呢?
办法只能是:
随时记录当前页面URL,当执行了 history.go(-1) 之后,获得新的页面URL,然后跟从前记录的URL做对比,如果一致,说明没回退成功,那么就是回退到头了。
这个办法在非极端场合是够用的,如果某些时候服务器强制回退,或者前后URL一致但还真就不是一个页面,那么我这个方法就失效了。
所以,应仔细规范自己的项目,避免极端情况。
window.history
window.history属性指向 history 对象,它表示当前窗口的浏览历史。
由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航。
浏览器工具栏的“前进”和“后退”按钮,其实就是对 history 对象进行操作
history 对象主要有两个属性。
history.back()
history.forward()
history.go()
注意,移动到以前访问过的页面时,页面通常是从浏览器缓存之中加载,而不是重新要求服务器发送新的网页。
其实还有很多内容,只不过不常见。写了也没什么用。暂时只写到这里。
w3c
菜鸟教程
window.history 方法总结
使用History
一、历史记录概览
二、添加和修改历史记录条目:
两种方法都允许我们添加和更新历史记录,它们的工作原理相同并且可以添加数量相同的参数。除了方法之外,还有popstate事件。在后文中将介绍怎么使用和什么时候使用popstate事件。
pushState()和replaceState()参数一样,参数说明如下:
两个方法的主要区别就是:pushState()是在history栈中添加一个新的条目,replaceState()是替换当前的记录值。
使用方法:
1、onpopstate
2、pushState
在history栈中添加一个新的条目
3、replaceState
替换当前的记录值
4、读取当前状态
在页面加载时,可能会包含一个非空的状态对象。这种情况是会发生的,例如,如果页面中使用pushState()或replaceState()方法设置了一个状态对象,然后用户重启了浏览器。当页面重新加载时,页面会触发onload事件,但不会触发popstate事件。但是,如果你读取 history.state 属性,你会得到一个与 popstate 事件触发时得到的一样的状态对象。
你可以直接读取当前历史记录条目的状态,而不需要等待popstate事件:
5、浏览器兼容性
window.history可以清空吗
window.history可以清空。根据查询相关公开资料得知:这个文件夹对应着Windows10系统的一类备份功能。
1、打开Windows设置,选择更新与安全。
2、在左侧菜单栏中选择备份,就可以使用文件历史记录进行备份功能的开关了。
window.history 页面栈的回退问题
我们平时再跳转页面时,页面会被保存至 页面栈 里。每次 回退 或 左滑回退 时,会延页面栈依次返回。
那么问题来了,现有场景如下:
从 A 页面 ==》 B 页面 ==》 C 页面,但从 C 页面返回时,只能返回至 A 页面。
即 B 页面不记录到 页面栈 里,那么从 C 页面返回时,就会直接返回至 A 页面。
如何才能不把 B 页面记录在 页面栈 里呢?
浏览器有个属性: history ,里面包含了所有页面的记录栈,但 不能修改 , 只能读取 。
跳转页面
我们平时一般都用 window.location.href = ' ' 来跳转页面,这种方式会把当前页面 push 到页面栈里。
其实还有一种方式 window.location.replace (' ' ),即把当前页面 替换 为新页面,其当前页面不会记录到页 面栈里 。
如在 B 页面跳转至 C 页面可写为: window.location.replace ('页面C')
这时再返回时,会直接返回至 A 页面。
但是,好像不能实现,这时浏览器的一个属性 history 就起到作用了
再 history 里有个方法: replaceState
替换当前浏览器的状态,语法为
history.replaceState(null, '', '你想要替换的页面地址')
这俩结合就能实现不保存当前页面至页面栈了
如有更好的办法,欢迎小伙伴评论~~~
关于window.history和windowhistoryreplaceState的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发表评论