我设置了一进入就显示登录界面,登录成功进入主界面,主界面是一个Tab切换的三个页面,正常登录进入之后切换正常,但是我在一个tab里面加了一个退出登录的按钮,点了后退出到登录界面,再次登录进来,tab切换就出问题了,点了没有反应,不切换了

- 发布:2015-05-09 14:15
- 更新:2015-05-13 20:38
- 阅读:2896
最佳回复

错误原因:
在setting.html里边你重新openWindow创建了一个新的login.html。导致home,tab又重新创建了一遍。
解决方案:
在setting.html注销登录的地方,plus.webview.getWebviewById('page-login').show();获取已存在的login.html直接进行show即可。
建议可以找一个4.4以上的手机。通过chrome来调试。可以很方便直观的看到目前创建的webview页面。

你是不是每次登陆成功后都会重新创建主页面?
如果是这样的话,是会有很多潜在问题。因为你每次进去就会创建主页面,而主页面又创建了其他子tab页。导致会一直重复创建。
你需要保证主页面始终只存在一个,包括子tab页。不要重复创建新的。

Danny - QQ125904483
Login页面跳转到Home页面的代码:
var prelHeomPage;
//预加载首页
mui.plusReady(function() {
prelHeomPage = mui.preload({
url: "home.html",
id: "home.html"
});
});
//登录点击事件
document.getElementById('btnLoginSubmit').addEventListener('tap', function() {
//验证输入
//TODO
//登录逻辑
//TODO
//登录成功后转到首页
prelHeomPage.show("pop-in", 100);
});
莫非我要在预加载前判断下home.html是否已经存在,如果存在就不预加载了?
openWebView的方式转场之后当前的页面不会被销毁或释放,而是依然在后台存在?
只有back方式的转场才会销毁或释放资源?
那岂不是很多地方都得加判断啦呀....

Danny - QQ125904483
测试工程见附件,根据引导说明就可以重现问题的(登录 -> 首页 ->设置 -> 注销 -> 登录 -> 首页,这时首页的tab切换就出问题了,另外左上角图标也只能显示一半)。

小云菜 - 相关代码及分享在http://www.cnblogs.com/phillyx
你既然是注销了,自然其他页面的生存期就不需要了,关掉就可以了
if (mui.os.ios || mui.os.ipad || mui.os.iphone) {
// 获取所有Webview窗口
var curr = plus.webview.currentWebview();
var wvs = plus.webview.all();
for (var i = 0, len = wvs.length; i < len; i++) {
if (wvs[i].getURL() == curr.getURL())
continue;
plus.webview.close(wvs[i]);
}
plus.webview.open('../login/login.html');
curr.close();
} else
plus.runtime.quit();

Danny - QQ125904483
调试了下,的确重复创建login、home、home-sub1、home-sub2、home-sub3,那就应该是:
1.openWindow的方式创建新的WebView对象,无论ID是否已经存在。
2.openWindow转场时当前的WV对象不会被销毁或释放。
3.只有back方式的转场WV才会被销毁或释放。
另外,有2点麻烦再确认下:
1.上述的情况意味着很多转场不能直接使用openWindow来创建,必须先判断ID是否存在?
2.预加载的情况是否和openWindow一致呢,如:
preHomePage = mui.preload({
url: "home.html",
id: "page-home"
});
如果已经存在就不能预加载了?
Danny
左上角图标只显示一半的问题呢?
2015-05-13 20:42