dreamlwj
dreamlwj
  • 发布:2017-07-10 09:25
  • 更新:2017-07-10 11:30
  • 阅读:1864

页面显示事件

分类:HBuilder

在打开页面的时候遇到问题,因为在plusReady没有执行完的时候,获取界面元素会出问题,然而目前只找到了一个事件:pagebeforeshow。

测试发现在一加手机上,pagebeforeshow会在plusReady之后执行,而换到小米5上面pagebeforeshow会在plusReady之前执行。

我想请教下:
1.怎么保证pagebeforeshow在plusReady之后执行?

  1. 如果没有办法保证,还有什么事件会在页面显示前,plusReady之后执行的?
  2. 如果都没有该怎么写这个逻辑?(不接受timer的方式,感觉太蠢了)
2017-07-10 09:25 负责人:无 分享
已邀请:
chender

chender - 与人为善

“因为在plusReady没有执行完的时候,获取界面元素会出问题”
这句话其实不完全正确,获取界面元素出问题的根本原因是界面没有加载完
只是plusReady也是在界面加载完后才会被触发,所以在plusready里面获取界面自然也没有问题
但是比较常规的做法是把需要获取界面元素的js代码,放在body后面,而不是head里面,或者在onload事件里面
另外pagebeforeshow在plusReady和顺序理论上是没办法确定的,pagebeforeshow代表的是根据webview的状态来触发的,plusReady是根据webview里面的网页的加载状态来触发的(网页加载完,且plus注入完);

所以,关于第二个问题 “如果没有办法保证,还有什么事件会在页面显示前,plusReady之后执行的?”是没有答案啊,
但是你的问题肯定可以通过其他方式解决,只是我现在不太确认你到底是遇到了什么问题,是想在界面显示前对界面元素做一些处理?

  • dreamlwj (作者)

    你好,我的问题如下,还望指点

    2017-07-10 10:06

dreamlwj

dreamlwj (作者)

谢谢你的回复。是这样的,我需要在每次页面被打开的时候去执行一次数据加载,
1.如果把加载放在plusReady函数里面,使用预加载的方式,plusReady只会调用一次,所以不通

  1. 如果放在pagebeforeshow里面,就需要知道页面是否加载完成了。

我刚才试了,js放到body后面,也是有问题的:

但是为什么不用预加载呢,因为个人能力问题,用不利索。80%的时候会提示max call stack 的问题。

挺好的一个平台,想继续用下去,所以想趁此机会把这个过程梳理清楚。

dreamlwj

dreamlwj (作者)

还有,就是,如果每次都使用mui.openWindow打开同一个页面的话,会不会每次都打开一个新的,之前打开过的是否会在返回后释放?

  • chender

    是的,返回时候默认就会close掉的,你可以重写mui.back,在返回的时候调用当前webview的hide方法

    2017-07-10 11:28

chender

chender - 与人为善

你的这个需求,解决方案很多,最简单的方案就是
在pagebeforeshow里面 mui.plusReady(function(){
xxxxx
});

  • dreamlwj (作者)

    在pagebeforeshow里面调用plusReady不妥吧,这样它自己触发一次,我再触发一次,不就两次了,而且不优雅。如果我要重写页面事件的话,需要怎么做呢?

    2017-07-12 20:47

  • chender

    回复 dreamlwj:plusreay(callback)的含义是:如果plus环境没准备好,那么在准备好后执行callback,如果plus换件已经准备好,立即执行callback;它只是用来解决一个回调执行的时机问题,所以界面里面写1w个plusready都是没有问题的,没什么优雅不优雅的

    2017-07-13 09:15

  • dreamlwj (作者)

    回复 chender:你这么一解释我就明白了,多谢

    2017-08-14 09:23

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