JS实现返回上一页并刷新页面的方法分析
本文实例讲述了JS实现返回上一页并刷新页面的方法。分享给大家供大家参考,具体如下:
正常情况下我们通过history.back()或者history.go(-1)返回上一级页面的时候,是不会刷新页面的。这种不刷新页面包含两种情况:
- 在android或者pc浏览器中看到的页面有刷新的效果,其实不是这样的,这个时候的所有的资源都是从缓存中加载来的。我们通过浏览器调试工具可以看到fromdiskcache或者frommemorycache。
- 在ios中甚至于返回到了上一页后,连上一页的脚本文件都没有执行;(其实不是没有执行,是执行了onpageshow)
上网搜索ios返回上一页并刷新页面的时候,会看到的解决方案有监听onpageshow事件,通过查看文档可以知道onpageshow事件中,可以通过使用PageTransitionEvent对象的persisted属性来判断,页面是直接从服务器上载入还是从缓存中读取;如果页面从浏览器的缓存中读取该属性返回ture,否则返回false。
在ios中如果要实现,返回上一页并刷新页面的话,可以在上一页的脚本文件中加入如下代码:
window.addEventListener('pageshow',function(event){ if(event.persisted){//ios有效,android和pc每次都是false sessionStorage.removeItem('refresh'); location.reload(); } });
但是这种方式在android和pc的浏览器中没有效果,经过尝试会发现android和pc的浏览器中每一次进入pageshow事件后,event.persisted永远都是返回false。
不管是在任何情况下,都会监听到pageshow事件。既然能进入这个函数,那就得想办法在这个函数里判断是否需要刷新页面。可以通过缓存的方式localStorage或sessionStorage或cookie。
要在页面中判断是否需要刷新,那就得在从下一级返回过来的时候,往cache中存入需要刷新。
sessionStorage.setItem('refresh','true'); history.go(-1);
然后在上一级也页面获取并判断
if(sessionStorage.getItem('refresh')==='true'){ sessionStorage.removeItem('refresh'); location.reload(); }
综合兼容所有设备的返回上一页并刷新页面的方式为:
window.addEventListener('pageshow',function(event){ if(event.persisted){//ios有效,android和pc每次都是false location.reload(); }else{//ios除外 if(sessionStorage.getItem('refresh')==='true'){ location.reload(); } } sessionStorage.removeItem('refresh'); });
注意:
1.在下一级页面返回的时候,要标记需要刷新页面(set)
2.在判断完成后,一定要删除之前的存储(remove)避免出现无限重载的情况
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript页面元素操作技巧总结》、《JavaScript操作DOM技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。