popstate的自动触发问题
2017-02-14 20:58
99 查看
前段时间,因为项目需要,需要监听微信的返回按钮,于是用到了HTML5中的popstate,作为history系列中的事件,popstate在微信中存在这样一个问题:"当页面被加载的时候,popstate会立即被触发,从而导致页面返回到上一级页面"。而根据官方文档对popstate的描述,只要访问历史记录就会触发popstate。而传统的History中访问页面和生产历史记录是同时的。在webkit(X5 blink)中,无论是刷新还是访问一个新网页都会触发popstate。
解决方案有两种:
方案一:
设置延迟时间:
设置延迟的=有一个弊端,你要执行的具体动作要等延迟时间过了才可以,各种手机所需延迟时间长短不同,延迟设置的过低,会立即触发你要执行的动作,设置的过高,这段时间内你要执行的动作都不会被触发。(例如返回键失灵)。
方案二:
第二种方案没有设置通过把页面加载完成后第一次触发的popstate事件屏蔽,来避免popstate马上执行。这中方案自己还没试过,貌似可行!
解决方案有两种:
方案一:
设置延迟时间:
function GoBack(e) { this.init(e); } GoBack.prototype = { constructor: GoBack, init: function (url) { this.pushHistory(); var bool = false; setTimeout(function(){ bool = true; },1000); window.addEventListener("popstate", function() { if(bool) { //这里填写具体的动作 } this.pushHistory();//出栈 }, false); }, pushHistory: function () { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); } } export default GoBack;
设置延迟的=有一个弊端,你要执行的具体动作要等延迟时间过了才可以,各种手机所需延迟时间长短不同,延迟设置的过低,会立即触发你要执行的动作,设置的过高,这段时间内你要执行的动作都不会被触发。(例如返回键失灵)。
方案二:
function GoBack(e) { this.init(e); } GoBack.prototype = { constructor: GoBack, init: function (url) { this.pushHistory(); window.addEventListener('load', function() { setTimeout(function() { window.addEventListener('popstate', function() { //要执行的具体动作 }); }, 0); }) }, pushHistory: function () { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); } } export default GoBack;
第二种方案没有设置通过把页面加载完成后第一次触发的popstate事件屏蔽,来避免popstate马上执行。这中方案自己还没试过,貌似可行!
相关文章推荐
- webkit内核下的mouseup后mousemove自动触发问题及解决方法
- 网页设计中的自动换行问题 []
- J2EE - 如何在JBoss中解决自动增长键值问题
- 探究客户端浏览器分辨率的自适应问题(如何使网站脚本自动适应客户端分辨率)(1)
- 解决jbuilder运行后tomcat下conf目录server8080.xml文件自动消失的问题
- 在做CRM界面的时候遇到的DIV滚动条自动显示的问题!!和解决方法!
- tomcat自动持久会话产生问题
- 探究客户端浏览器分辨率的自适应问题(如何使网站脚本自动适应客户端分辨率)(2)
- 关于回车自动跳转的问题,能不能有选择的跳转??
- 关于fedora3自动挂载cdrom的问题
- access如何用代码在“默认值”里实现自动编号?单据流水号生成问题。
- 当 DHCP 出问题时,自动获取IP的机器也会出问题
- 网页设计中的自动换行问题
- [问题]DotNet 项目如何实现在构建时 Build 号自动增加?
- IE中文字自动换行问题
- MSN机器人自动下线的问题解决了
- 英文排版的问题:怎么能让英自动排列整齐
- Resin安装,配置和在Linux上的自动启动问题
- 探究客户端浏览器分辨率的自适应问题(如何使网站脚本自动适应客户端分辨率)(3)
- 文件太新了也有错误? .exe.config 类型文件自动更新的问题.