GETONE
GETONE
  • 发布:2015-08-16 23:49
  • 更新:2015-08-17 13:15
  • 阅读:1673

预加载的页面如何实现返回逻辑?

分类:MUI

情景如下:
使用MUI的demo方法预加载公共父模板文件temple,id为detail,预加载公共子模板,id为subDetail。

  1. 在列表页打开detail页面,加载www.qq.com内容,此时按demo方法返回是ok的,将隐藏公共模板。

  2. 在列表页打开detail页面,加载www.qq.com内容,并点击其中的一些链接,此时如果按照demo方法将直接隐藏公共模板而不是返回到前一个链接。此时可以通过判断第一次打开的URL地址(www.qq.com)与currentWebview的URL是否一致处理,如果一致,则隐藏公共模板,否则使公共子模板back。

  3. 在列表页打开detail页面,加载www.a.com内容,该网页是一个跳转链接,跳转到www.b.com,这种情况下应该如何处理呢?如果采用第二种方法处理,将始终执行子模板的back,执行到最后出现空白页(URL为空)

2015-08-16 23:49 负责人:无 分享
已邀请:
BoredApe

BoredApe - 有问题就会有答案。

最简单的一种实现方法是:
使用webview中setJSFile方法设置预加载的JS文件,在js文件中可以监听backbutton键,利用canBack方法查询Webview窗口是否可后退如果可以就history.back();不可以wobj.close();
以下是参考代码:

var ws=null,embed=null;  
// H5 plus事件处理  
function plusReady(){  
    ws=plus.webview.currentWebview();  
    embed=plus.webview.create("http://www.baidu.com","",{top:"46px",bottom:"0px"});  
    embed.setJsFile( "_www/script.js" );  
    ws.append(embed);  
}  
if(window.plus){  
    plusReady();  
}else{  
    document.addEventListener("plusready",plusReady,false);  
}

script.js为

if(window.plus){  
    init();  
}else{  
    document.addEventListener('plusready',init,false);  
}  

function init () {  
    plus.key.addEventListener('backbutton',function () {  
        var obj = plus.webview.currentWebview();  
        obj.canBack(function (e) {  
            if(e.canBack){  
                history.back();  
            }else{  
                obj.close();  
            }  
        });  
    });  
}

该问题目前已经被锁定, 无法添加新回复