在某个需要登录的界面,刷新发现账号被踢掉了,跳到登录界面,登录成功后返回还在这个页面但是,数据怎么不加载了呢?
- 发布:2017-12-06 18:20
- 更新:2017-12-07 14:27
- 阅读:1550
z***@gmail.com - Hbuilder是个好东西
最简单的方法: 跳登陆前在列表页加一个
setInterval, 检测一个标记,比如 localStorage['user_login'];
然后登陆页登陆成功后,设置 localStorage['user_login'] = 1;
返回列表页后, setInterval 检测发现 localStorage['user_login'] 的值发生了变化, 就清空这个 localStorage['user_login']标记, 然后 重新请求列表数据
z***@gmail.com - Hbuilder是个好东西
然后在发一个比较优雅的办法:
核心思路:
当页面A打开时,开启一个setInterval,这个interval里,不停的检测当前窗口是否是显示状态。因为窗口一打开的时候一定是显示状态了,所以当窗口变为隐藏状态时,那就可以认定窗口是被新的窗口盖住了。这个时候用一个 js变量做个 标记,标识这个窗口当前被盖住了。然后轮询继续检测。当检测到窗口再次显示,就说明窗口被回显出来了。那这个时候给页面触发一个js事件就好了。
这个方法的有点:不用在打开的页面(如登陆页)做标记,而是完全在原页面就可以完成。
function listenPageBack () {
var webHideviewMark = 0;
var backTimer = setInterval(function(){
if( !window.plus ){
return;
}
var currView = plus.webview.currentWebview();
var cid = null;
try{
cid = currView.id;
}catch(ex){}
if( !currView || !cid ){
return;
}
//找到所有的正在显示的窗口
var displayViews = plus.webview.getDisplayWebview();
var ids = $.map( displayViews , function(item){
return item.id;
} );
//如果当前窗口不在显示的窗口列表中,则证明被隐藏了;因为隐藏了,做一个标记
if( $.inArray(cid, ids) == -1 ){
webHideviewMark = 1;
}else{
//如果是显示的,那就检查是否有已隐藏的标记
if( webHideviewMark ){
//被隐藏过,说明是被回显了。
webHideviewMark = 0;
$(document).trigger('jsGoBack');
}
}
}, 100);
}
//页面底部执行js
listenPageBack ();
//绑定事件,进行返回后的刷新处理,以下代码基于zepto或jquery
$(document).on('jsGoBack', function(){
//TODO. 页面返回时就会触发这里的代码
});