移动端onpopstate监听history变化

问题描述

移动端,使用下面代码监听popstate事件:

window.onpopstate = function (event) {
      alert(`${JSON.stringify(event)}}`);
};

结果发现,得到的alert内容里只有{isTrusted:true},用Object.keys(event).length得到的长度也只有1。

但是在浏览器打印的popstate的event对象却有这么多:

clipboard.png

问题一:请问这是怎么回事?
问题二:{isTrusted:true}是在ios10上的测试结果,在ios9.2版本的手机上,得到的是{state:null},即得到的是state而不是isTrusted,而且Object.keys(event).length得到的长度是2。这个又是怎么回事?
问题三:发现ios9.2在页面首次进入时就会触发popstate事件,且event是{state:null},ios9.2以上的机型在刚进入页面的时候不会触发。这又是怎么会是?
😫😫😫😫😫

阅读 3.2k
1 个回答

自己回答下第一个问题和第二个问题。
第一个:原因在于JSON.stringify只能读到对象本身的可枚举属性,并序列化成JSON对象
第二个:ios9.2上除了state可枚举,还有一个clipboardData属性也可以枚举,而ios9.2+的手机上,state是不可枚举的,另有一个可枚举的属性是isTrusted属性,ios9.2没有isTrusted属性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题