a .场景1 :直接进入a页面,点击微信上的后退按钮
代码如下。
window.addevent监听器(' pop state ',function(e ) {
weixinjsbridge.call (close window );
},false;
预期:关闭页面,返回以前的微信界面
实际结果:现象与预期相符,但没有截获popstate。
原理:仅当浏览器执行操作以更改历史记录时,才会触发popstate事件。
b .场景2 :直接进入a页面,在a页面自动$state.go跳到子页面b,在b页面中途返回
代码如下。 写入父页面a
window.addevent监听器(' pop state ',function(e ) {
weixinjsbridge.call (close window );
},false;
预期:返回微信页面
实际结果:页面加载到b页面后,直接返回微信页面
修复:添加标识位isFirst,以防止在加载页面时更改history并启动popstate
修改后的代码如下。
$scope.isFirst=true;
window.addevent监听器(' pop state ',function(e ) {
if (! $scope.isFirst
weixinjsbridge.call (close window );
}else{
$scope.isFirst=false;
}
},false;
c .场景3 :首先进入a页面,在a页面上用window.location跳到b页面,在b页面的中点返回
代码如下。
window.addevent监听器(' pop state ',function(e ) {
weixinjsbridge.call (close window );
},false;
预期:进入拦截,正常返回微信页面
实际结果:监听被触发,但返回a页
修改代码后:
功能推送历史
var state={
title: 'title ',
url: '# '
(;
//state:与指定网址相关联的状态对象。 当发生popstate事件时,回调函数window.history.pushstate(state,' title ',' # ' );
//添加此记录时,浏览器的地址为最新地址,即原始URL的末尾为#,history.length为1,浏览器返回原始URL,页面内容保持不变}
推式历史(;
window.addevent监听器(' pop state ',function(e ) {
weixinjsbridge.call (close window );
},false;
修正原理: popstate的监听原理在浏览器行为时触发,但页面返回上一页,不能用Web页面代码操作。 因此,使用pushState添加此页面的url,代表此页面,在window.history.pushState中将本地链接推入history,单击返回,进行监听,监听代码
注:调用history.pushState (或history.replaceState )不会触发popstate事件。 例如,只有在执行浏览器操作(如单击浏览器的后退按钮或在JS中调用history.back )时才会触发