问题描述
移动端,使用下面代码监听popstate事件:
window.onpopstate = function (event) {
alert(`${JSON.stringify(event)}}`);
};
结果发现,得到的alert内容里只有{isTrusted:true}
,用Object.keys(event).length
得到的长度也只有1。
但是在浏览器打印的popstate的event对象却有这么多:
问题一:请问这是怎么回事?
问题二:{isTrusted:true}
是在ios10上的测试结果,在ios9.2版本的手机上,得到的是{state:null}
,即得到的是state而不是isTrusted,而且Object.keys(event).length
得到的长度是2。这个又是怎么回事?
问题三:发现ios9.2在页面首次进入时就会触发popstate事件,且event是{state:null}
,ios9.2以上的机型在刚进入页面的时候不会触发。这又是怎么会是?
😫😫😫😫😫
自己回答下第一个问题和第二个问题。
第一个:原因在于
JSON.stringify
只能读到对象本身的可枚举属性,并序列化成JSON对象第二个:ios9.2上除了state可枚举,还有一个clipboardData属性也可以枚举,而ios9.2+的手机上,state是不可枚举的,另有一个可枚举的属性是isTrusted属性,ios9.2没有isTrusted属性。