Danny
Danny
  • 发布:2015-05-18 17:45
  • 更新:2015-06-02 12:39
  • 阅读:8613

应用Hello MUI中预加载一个模板父页面和共用子页面实现无等待窗体切换遇到的问题

分类:MUI

应用Hello MUI中预加载一个模板父页面和共用子页面的方案(http://ask.dcloud.net.cn/article/106),实现无等待窗体切换功能。遇到两个问题求助各路英雄好汉!
1.多级子页面公用一个WebView时,如何逐级返回
在A页面选择列表中的一项,打开公用的WebView,通过loadurl的方式加载B页面,在B页面点击按钮后再通过这个公用WebView加载C页面,那么问题来了,在C页面点击返回,直接隐藏了公用的WebView,显示了列表A页面,这里如何实现逐级返回呢,我试了下借助WebViewObject的back,但是不太完美,看看大伙儿的方案或者官方大大的方案。

2.如1中场景,A页面中定义了连续两次返回即退出的功能,但是,在B页面或者C页面,点击Android手机的返回键,居然调用了A页面的mui.bak=function(){...},提示再点一次退出应用程序,正常情况下在B或者C页面应该是执行公用WebView模板父页面中定义的返回...找了很久没找到原因。

2015-05-18 17:45 负责人:无 分享
已邀请:
太阳神

太阳神

核心问题是头部点击返回动作和手机back健的返回动作不一致,怎么会这样的啊

Danny

Danny (作者) - QQ125904483

上代码,求解放

Danny

Danny (作者) - QQ125904483

大哥们,快出来呀

Danny

Danny (作者) - QQ125904483

为啥Android物理按键执行的不是当前显示的WebView的事件呢?这是为啥?

DCloud_UNI_CHB

DCloud_UNI_CHB

首先,模板方案有其适用场景:同级页面,不存在返回需求的情况;

例如:从A页面既可以打开B页面、又可以打开C页面,则B、C可共用模板页面;

但你的场景下,A->B->C,此种情况下,不建议适用模板方案;因为该模式下,返回效果并不理想,即使适用webview.back,也会有白屏出现;

back按键的问题,应该是5+ runtime的bug,该team正在确认;

Android_磊子

Android_磊子

此问题确认为bug,静待更新。

  • Danny (作者)

    感谢磊哥,磊哥V5

    2015-05-20 20:27

太阳神

太阳神

更新了吗?我升级过后还会出现这种情况啊。
a->b->c
按c的页面头部的返回没问题,但是按android的返回健就出现把b给关了

太阳神

太阳神

B是直接open出来的,不是在a预加载的

太阳神

太阳神

求解决啊,不然就要停工了,预加载的话就没问题,但不可能所有很少用到的页面都要预加载吧

  • Danny (作者)

    1.7版好像解决了呢,你试试http://ask.dcloud.net.cn/question/5883

    2015-06-01 11:32

  • 太阳神

    我去看看

    2015-06-01 11:36

  • 太阳神

    看了一下这个帖子,没解决问题嘛,还是要求预加载

    2015-06-01 11:43

  • 太阳神

    而且像a-b-c这种模式的业务,如果出现第4个页面,因为不能和a和b共享母版,除非和c的母版结构完全一样,不然又要预加载一套

    比如我就遇到一个情况,d页面是搜索结果列表页面,d不可能和c(详细页)共享母版,因为d的列表项点开来是c啊

    2015-06-01 11:54

  • DCloud_UNI_CHB

    你的代码和楼主的一样吗?直接运行楼主上传的代码能重现问题不?

    2015-06-01 12:19

  • 太阳神

    回复 DCloud_UNI_CHB:您下载一下 http://xuep.in/app.apk 试一下就知道了


    测试的时候,在首页搜索框中填写"衬衫",出现的搜索结果列表页中随便点开一个商品,这个时候按android的返回键,就会发现问题。


    列表页我没有重写mui.back,就只是使用默认的行为

    2015-06-01 17:07

  • 太阳神

    回复 DCloud_UNI_CHB:首页是这样打开结果列表页的:

    mui.openWindow({

    url: 'search-container.html',

    id: 'search-container'

    });


    search-container.html 中相关代码是:(没有重写mui.back)

    mui.init({

    gestureConfig: { doubletap: true },

    subpages: [{

    id: 'search-content',

    url: 'search.html',

    styles: { top: '90px', bottom: 0 }

    }]

    });


    商品详细页没有相关代码,也没有重写mui.back

    2015-06-01 17:13

  • 太阳神

    回复 DCloud_UNI_CHB:


    search.html 中点开商品详情的关联代码:


    var container_webview = plus.webview.getWebviewById('default-container');  
    var content_webview = plus.webview.getWebviewById('default-content');
    mui.fire(container_webview, 'update_title', { title: '商品详情' });
    content_webview.loadURL('detail.html');
    container_webview.show('slide-in-right', 150);

    详情页使用了预加载

    2015-06-01 17:15

  • 太阳神

    会不会是 预加载的webview ----点开----> openWindow的webview ----点开---->预加载的webview,然后返回就会出问题?

    2015-06-01 21:46

太阳神

太阳神

@DCloud_Android_磊子:
@DCloud_MUI_CHB:

预加载的webview --------点开(使用openWindow)----> 非预加载的webview -------点开------>预加载的webview,然后android实体按键返回就会出问题

必定会出问题,我试过好几部不同品牌不同型号不同android版本的手机,都有这个情况

太阳神

太阳神

绝对不是我代码的问题,因为页面头部的返回是正常的

Android_磊子

Android_磊子

mui.openWindow会重新创建窗口的,返回键处理逻辑是最近执行plus.key.addEventListener执行。不知道你注意这地方没有。

  • 太阳神

    我没有定义 plus.key.addEventListener ,都是用你们的默认返回行为,或者最多有的页面重新定义mui.back,你的意思是每个页面 都要 定义 plus.key.addEventListener 来针对实体键的返回?

    2015-06-02 13:02

  • 太阳神

    就算定义mui.back,也是参照官方例子里面要求的隐去子窗口


    mui.back = function() {

    var current = plus.webview.currentWebview();

    current.hide('auto');

    setTimeout(function() {

    if (content_webview == null) content_webview = current.children()[0];

    content_webview.hide('none');

    }, 200);

    };

    2015-06-02 13:13

  • 太阳神

    不知道你明白了没有,就是同一个页面 实体键的返回 和 mui-action-back 的返回行为不一致,而且明显实体键现在这样是错误的

    2015-06-02 13:15

  • 太阳神

    a -b-c 三级如果都是 预加载的 那肯定没问题

    但问题是:

    如果 b是a页面通过 mui.openWindow的方法打开的新窗口,

    c是b打开的,但是c是预加载的,这个时候就出现问题了

    2015-06-02 13:19

  • 太阳神

    我还没有试过,如果c 是b页面通过 mui.openWindow的方法打开的情况会不会出问题

    2015-06-02 13:21

  • DCloud_UNI_FXY

    回复 太阳神:直接发一个测试工程

    2015-06-02 13:37

  • 太阳神

    回复 DCloud_UNI_FXY: 已经给你私信,发了整个项目的源代码

    2015-06-02 13:51

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