守护
守护
  • 发布:2019-05-22 09:28
  • 更新:2020-05-29 16:28
  • 阅读:1302

【报Bug】mui.preload预加载的页面经过一段时间后通过mui.fire监听方法打不开页面

分类:HBuilderX

测试页面--首页:index.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>Hello MUI</title>  
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">  
<meta name="apple-mobile-web-app-capable" content="yes">  
<meta name="apple-mobile-web-app-status-bar-style" content="black">  
<link rel="stylesheet" href="css/mui.min.css">  
<link rel="stylesheet" type="text/css" href="css/app.css"/>  
<script src="js/mui.min.js"></script>  
<script>  
mui.init();  
mui.plusReady(function () {  
    //在APP首页预加载多个待用的页面  
    var testPage=mui.preload({url:'test.html',id:'test.html'});  
    //var pagen=mui.preload({url:'pagen.html',id:'pagen.html'});  
    // testPage.addEventListener('loaded',function () {    
    //  console.log('000');  
    // });  
    mui(document).on('tap','#test',function(){  
        console.log(testPage.id);//显示待显示页面的id(即便是下面的代码打不开testPage页面时也能显示预加载页面的id)  
        //有时候在低端智能安卓手机上打不开(经反复测试发现在index.html这个停留一段时间不操作后,有很大的概率打不开)  
        //一般通过重启APP之后又能通过mui.fire里面的监听方法打开页面了  
        //testPage页面的refreshPage监听事件直接显示testPage  
        mui.fire(testPage,'refreshPage',{data:'你好!'});  
        //假如在打不开testPage页面时,加入如下代码,就能打开  
        //testPage.show();  

    });  
});  
</script>  
</head>  
<body>  
<header class="mui-bar mui-bar-nav">  
    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
    <h1 class="mui-title">测试mui.preload预加载</h1>  
</header>  
<div class="mui-content">  
    <button id="test" type="button" style="margin-top: 100px;" class="mui-btn mui-btn-blue mui-btn-block">打开预加载页面</button>  
</div>  
</body>  
</html>

测试页面2:--test.html

<!doctype html>  
<html>  
<head>  
<meta charset="utf-8">  
<title></title>  
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
<link href="css/mui.min.css" rel="stylesheet" />  
<script src="js/mui.js"></script>  
<script type="text/javascript">  
    mui.init();  
    window.addEventListener('refreshPage',function (event) {  
        var data=event.detail.data;  
        mui('#t2')[0].style.display='none';  
        mui('#t1')[0].innerText=data;  
        plus.webview.currentWebview().show();  
    });  
</script>  
</head>  
<body>  
<header class="mui-bar mui-bar-nav">  
    <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
    <h1 class="mui-title">标题</h1>  
</header>  
<div class="mui-content">  
    <div id="t1">hello world!</div>  
    <div id="t2"></div>  
</div>  
</body>  
</html>
2019-05-22 09:28 负责人:无 分享
已邀请:
守护

守护 (作者)

mui.preload预加载的页面偶发性打不开,重启APP则会打开,然后再过段时间又打不开。

有问

有问 - 生活,趣与失。

昨天还发生了当前窗口自定义关闭事件。
父窗口回调自定义事件,但参数无法传递的BUG。
最后没办法了,换了别的方式。

守护

守护 (作者)

通过调用mui.fire之前打印一下testPage对象,如下信息

{"view_array":[],"IDENTITY":"NWindow","uuid":"NWindow91558607581503","callbacks":{},"callback_id":"plus41558610922054","id":"test.html","preload":true}

但是 mui.fire预加载页面里面的refreshPage压根就没有进去

  • t***@163.com

    我也是打印的话这webview的对象有,但是show不出来,你现在怎么解决的,预加载的页面在后台停留时间太久就会打不开,如果是从新create的页面就可以打开,

    2019-06-04 20:57

  • t***@163.com

    预加载的页面在应用切后台一段时间后就打不开了,打印这个webview对象是存在的,如果是create的webview就一直可以打开,就是preload的不行,我的情况和你一模一样,你是在mui.fire里show,我是在evalJS里show的都不展示,请问你现在是怎么解决的?

    2019-06-04 21:03

  • 守护 (作者)

    回复 t***@163.com: 这个问题,只在预加载的页面出现,目前没有好的方法。dcloud技术没有回复。

    2019-06-05 19:48

  • 守护 (作者)

    回复 t***@163.com: 你好,这个问题你有解决方案吗?

    2019-07-06 19:27

  • t***@163.com

    回复 守护: 没有解决,等待官方给回复吧

    2019-07-09 15:31

守护

守护 (作者)

mark

kaiven

kaiven

需要等待一段时间,但是,这太影响用户体验!

6***@qq.com

6***@qq.com

我感觉是你的test页面被内存回收了页面顶级事件,你可以尝试在test页面写setInterview()函数。通过js改变变量值,setInterview定时的刷新检查storge里面的值是否改变。这个有点像以前没有sokect长连接时,通过轮询来操作

叶南淮

叶南淮

请问解决了吗 我也遇到了这个问题,监听事件无响应

  • 守护 (作者)

    还没有解决。dcloud官方估计不会在修复mui的组件了,这个问题一直困扰。

    2020-05-29 18:43

  • 叶南淮

    回复 守护: 我用了你的方法,加了句testpage.show()

    2020-06-01 14:10

  • 守护 (作者)

    回复 叶南淮: show()的话,只是显示了页面,但是并不会触发 mui.fire里面监听的方法,如果那个方法中有ajax的数据访问,那是获取不了的

    2020-06-01 19:29

  • 叶南淮

    回复 守护: 那我还好,只是用webview显示一个网页。

    2020-06-01 20:27

  • 叶南淮

    回复 守护: 请问这个问题你现在有解决吗,我之前的方法现在突然失效了

    2020-12-08 13:41

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