webApp 物理键back处理

app中存在如下三种页面:

1)普通页面,可以直接回退
2)不允许回退的页面(eg: alert, confirm)
3)页面有浮层,需要先处理浮层(eg:actionsheet)
 
思路:
1.特殊页面中包含一个物理键back的处理函数
2.document "backbutton"事件触发时,寻找当前页面的处理函数,有则执行,无则默认执行back操作.

1.监听backbutton事件

VIEW_HANDLER: 'backButtonHandler', //各个视图的物理键处理函数
init: function(){
//增加监听back 的事件
document.addEventListener("backbutton",BackHandler.backHandler.bind(BackHandler));
}
 

2.读取当前页面是否设置back事件

_isPreventDefault: function(){

//如果视图有自定义的物理键拦截动作,则优先执行。
var activeView = Cmp.getActiveView();
if( activeView && activeView[this.VIEW_HANDLER]){
if( activeView[this.VIEW_HANDLER].apply(activeView) ){
return true;
}
}

return false;
}
 

3.设置默认back回调


backHandler: function(){

if( BackHandler._isPreventDefault() ){
return;
}

if(UrlHistory.getUrlCount() === 1){
BackHandler.quitApp();
}else{
location.back();
}
}
 

4.在页面上添加back回调

backButtonHandler: function () {
if(Loading.getIsLoading()){
return true;
}else{
return false;
}
}
原文地址:https://www.cnblogs.com/jun3101s/p/5708236.html