一、摘要:

总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题。

二、总结:

实现效果:

实现代码:

上面的编辑页面加载的时候就要先调用一次pushHistory()方法,如果不先调用一遍,在第一次点击浏览器上的返回按钮时,不会弹出提示框,必须在你按过一次手机页面上的返回键之后,你点击了提示框上的取消按钮,你再按浏览器上的返回键页面才能弹出提示框。

js关键代码:

 下面总结history对象的用法:

a)历史记录 前进和后退的方法:

1.后退方法:

2.前进方法:

3.移动到指定的历史记录点:

查看浏览器中一共有多少页:

4.popstate事件(监听浏览器的点击事件):

每当激活的历史记录发生变化时,都会触发popstate事件。

即每当点击浏览器的前进或是后退的时候都会触发popstate事件,如下代码:

上面的代码可以不加定时器,根据实际情况而定,上面的代码等同于:

window.onpopstate=function(e) {

closewindow();

}

官方解释如下:

5.pushState()方法主要是添加历史记录条目,replaceState是修改历史记录条目

总结:

解释上面的那个问题,在页面初次加载编辑页面的时候就要调用pushHistory()方法(主要是调用pushState()),主要是用来改变浏览器的历史记录条目,

当加载编辑页面的时候(如下),因为调用了pushHistory()方法,所以浏览器的地址会改变,地址后面会加上我们在pushState中添加的参数"#",加"#",显示的页面仍然是当前的编辑页面,当用户按了浏览器的返回键,页面返回到加"#"号之前的那个页面,也就是下图的这个地址的页面,仍然是当前的编辑页面,这时因为当前的编辑页面的历史页面发生变化,所以会触发popstate事件,从而就会调用我们写的closewindow()方法弹出提示框了。

同理,如果起初没有调用pushHistory()方法,即没有添加历史记录条目,第一次进入编辑页面然后就按浏览器的返回键,这时就会直接返回列表页面(项目中是从列表页面进入编辑页面),因为当前编辑页面没有历史记录条目发生变化(提示框的显示是在编辑页面),所以不会触发popstate事件,进而也不会有提示框弹出。

参考资料:https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history#popstate事件

(如有不对,望指正~)

最新文章

  1. JS前台base32加密,C#后台解码
  2. SpringMvc的数据绑定流程
  3. SRM144 - SRM 148(少144-DIV1-LV3,147-DIV2-LV3)
  4. 针对苹果最新审核要求为应用兼容IPv6-备用
  5. 学习笔记——原型模式Prototype
  6. mysql的连接
  7. 【转】第8章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
  8. Json 转 dynamic
  9. 【linux】之查看物理CPU个数、核数、逻辑CPU个数
  10. C#学习笔记(3)——操作sqlserver数据库增删改查
  11. Swift 使用 #warning
  12. vi/vim 常用命令 之 一图定天下!
  13. 【poj3016】 K-Monotonic
  14. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制
  15. Robot Framework(Collections 库)
  16. Win10自带Ubuntu子系统下Mysql安装踩坑记录
  17. php中NULL、false、0、" "有何区别?
  18. PHP实现AOP的雏形
  19. Observable观察者模式的使用
  20. java.lang.ClassFormatError: Truncated class file

热门文章

  1. time元素和datetime、pubtime属性
  2. console对象
  3. Nginx反向代理配置可跨域
  4. ubuntu eclipse 中安装 python + PyDev
  5. android view : 绘制
  6. C语言读取PE文件信息(一)
  7. pb将datawindow数据导出EXCEL
  8. OpenGL的学习资源
  9. OGRE启动过程详解(OGRE HelloWorld程序原理解析)
  10. React Native的环境搭建以及开发的IDE