a***@qq.com
a***@qq.com
  • 发布:2016-10-20 23:45
  • 更新:2018-04-15 19:37
  • 阅读:5138

关于webview的loaded事件为何无法触发

分类:MUI

研究MUI和HBuilder有几天时间了,几个DEMO看完之后,发现一个有意思的问题,就是MUI的登录模板。
首先我先贴出代码:
(因为这个官方DEMO,plusReady的部分太长,我就只贴出了这个部分)
$.plusReady(function() {
plus.screen.lockOrientation("portrait-primary");
var settings = app.getSettings();
var state = app.getState();
var mainPage = $.preload({
"id": 'main',
"url": 'main.html'
});
var main_loaded_flag = false;
mainPage.addEventListener("loaded",function () {
main_loaded_flag = true;
});
var toMain = function() {
//使用定时器的原因:
//可能执行太快,main页面loaded事件尚未触发就执行自定义事件,此时必然会失败
var id = setInterval(function () {
if(main_loaded_flag){
clearInterval(id);
$.fire(mainPage, 'show', null);
mainPage.show("pop-in");
}
},20);
};
我在注册完账号,输入用户名和密码之后,点击登录怎么都没有反应。我用Chrome的inspect模式下,发现登录按钮已经tap了(进了一个我设置的断点)

问题出在toMain函数,官方的做法,给了一个标志位,main_loaded_flag,为了保证页面在加载完毕后,自定义事件能够响应到,这个flag默认为false,只有main这个webview响应了loaded事件,把这个标志位设置为true,就能【清除定时器->FIRE自定义事件->显示main这个webview】,然而我在
main_loaded_flag = true这里设置了断点,大概等了10分钟,仍然没有触发进来

我好奇的问题在于:
1、preload有这么慢吗?
2、loaded事件为何没有被触发,我在度娘上几乎找不到有关于loaded的技术贴

------------------------追加问题分割线------------------------

  • 在我把APP退出之后,第二次启动APP,登录,顺利完成。
  • 也就是说——这个问题在于,用户第一次启动APP出现的
  • 我已经验证了4次(卸载,CTRL+R运行,等待进断点,退出,重进),重现率可以说是100%
  • 第3个问题:首次使用APP,preload或者loaded事件会失效吗?
2016-10-20 23:45 负责人:无 分享
已邀请:
Trust

Trust - 少说废话

已知的bug,下个版本修复。
临时解决方案:将reg.html中app.reg()回调中的openwindow,修改为$.back()即可。

关于5+webview相关信息,可以参考相关API

  • 1***@qq.com

    弱弱的问一句【当您要参考这个演示程序进行相关 app 的开发时, 请注意将相关方法调整成 “基于服务端Service” 的实现】,这个有案例吗,要怎么调呢?

    2018-04-15 19:37

a***@qq.com

a***@qq.com (作者)

你们的demo的入口页是login,而不是main
假设:
如果你们的入口页是main,判断这是一个没有登录过的用户,再跳转到login,这样main页面是不是就被load下来,从而loaded事件就能正常触发?

3***@qq.com

3***@qq.com

我也遇到这个问题,第一次登录成功后 设置-退出,再登录就没反映了,同样是loaded没触发。

w***@163.com

w***@163.com

同样感觉loaded事件没有触发。测试发现,第一个页面会触发,后面的好像都不会触发。

hiweek

hiweek

新版本这个这问题解决了吗?

貌似还没有。

setting页退出登录的代码不改动,不会出现第三方登录的图标,无法重新登录。

退出代码改为opwn.windows,能显示第三方登录,但登录后loaded没有被触发,进入不了main页。

hiweek

hiweek

暂时解决了。

办法是退出账号设置一个本地变量做个标志,执行main时根据这个标志设置main_loaded_flag = true;再将本地变量删除。

3***@qq.com

3***@qq.com - 80后码农

如果入口页是main.html,判断这是一个没有登录过的用户,再跳转到login.html,点击微信登录,登录认证成功后,没有再跳转到main.html,调试了一下,是loaded事件没有触发,【main_loaded_flag = true】没有执行!这问题怎么解决?

  • 五叶神

    你是先打开的main页面,已经跑过一边了,登录后自然不会主动执行,登录成功后mui.fire或者reload去更新main重新请求数据

    2017-10-13 17:02

  • 3***@qq.com

    谢谢了!

    2017-10-13 17:25

1***@qq.com

1***@qq.com - 90后码农

弱弱的问一句【当您要参考这个演示程序进行相关 app 的开发时, 请注意将相关方法调整成 “基于服务端Service” 的实现】,这个有案例吗,要怎么调呢?

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