地图
地图
  • 发布:2015-07-15 11:54
  • 更新:2015-07-17 16:24
  • 阅读:5025

webview 的 onloaded 和 loaded 怎么始终都不触发?

分类:HTML5+
        var webviewdetail = null;  
        var waitui = null;  
        mui.plusReady(function(){  
            mui.init();  
            webviewdetail = plus.webview.currentWebview();  
            webviewdetail.onloading = loadingwait;  
            webviewdetail.onerror = loaderror;  
            //webviewdetail.onloaded = loaddone;  
            webviewdetail.addEventListener("loaded", function (e) {  
                alert('loaddone');  
            })  
        });

求解!

2015-07-15 11:54 负责人:无 分享
已邀请:
chender

chender - 与人为善

在pusReady是在loaded之后,你注册监听的时候,loaded事件已经触发完了

DCloud_App_Array

DCloud_App_Array

先说下plusready事件:
plusready是说明当前Webview的5 API准备完成,这时候才能正确的调用5 API(如果plusready没有触发则无法正常调用)
mui的ready方法就是封装的plusready事件。

再Webview的onloading、onloaded事件:
onloading是在Webview窗口要加载新的html页面时触发(包括页面重定向也会触发)、onloaded是在Webview窗口加载html页面完成时触发
事件的触发是有个时机的问题,如果对应的事件已经发生再监听(onloading=function(){})则不会触发,为了避免这种情况的发生,应该在加载html前监听事件,如A页面打开B页面,在A页面中创建B页面的时候就进行监听,如下A页面中的JS:

var b=plus.webview.create(null,'id');  
b.onloading=function(){  
    console.log('onloading');  
}  
b.onloaded=function(){  
    console.log('onloaded');  
}  
b.loadURL('url');
地图

地图 (作者)

loading 是可以正常触发,调用方法。

地图

地图 (作者)

那应该挪到 plusready外面 注册码? 但是loading 是可以触发的。

地图

地图 (作者)

function opendetail (a) {  
            //mui.toast(plus.webview.all().length);  
            webviewdetail.loadURL(a);  
        }

其实中间调用了loadURL这个方法。应该会再次出发loaded吧?loading都可以触发。

  • chender

    loaded这个事件是webview的,和window的load事件好像不太一样,估计只会执行一次

    2015-07-15 12:04

  • 地图 (作者)

    哪有什么办法让这个loaded再次出发呀? 必须new 一个webview吗?

    2015-07-15 12:16

  • chender

    回复 地图:你为什么一定要让他触发loaded事件啊,直接通过js调用方法不是更方便吗

    2015-07-15 12:55

  • 地图 (作者)

    是因为在load之前,调用了nativeUI.showWaitting(), 然后再loaded的时候,close这个waitting啊。

    2015-07-15 15:07

地图

地图 (作者)

试了放到plusready外,还是不行,不能触发

chender

chender - 与人为善

你放外面都不能访问到currentWebview吧

地图

地图 (作者)

调试 没报null的错。。。

  • chender

    你必须在plusready后才能访问到当前的webview吧,但是plusready是在loaded之后,所以你加监听的时候肯定已经loaded完了,至于你说的后来又调用loadURL这个方法,loadUrl应该只会触发window的loaded事件,不会触发webview的loaded事件

    2015-07-15 12:54

KingMario

KingMario

mui.init不是应该放在mui.plusReady外面的吗?

12312312

12312312

你这个根本就没办法触发,放哪都一样。

云海帆

云海帆 - 咨询问题请+Q1395641578

是不是可以用mui.ready() 替代?

deiphi

deiphi

我试过这样也不行:

        var newWebview = plus.webview.create(url, id);  
        newWebview.onloaded = function(){  
            console.log("loaded?");  
            newWebview.show();  
        }

onloaded里面都没有执行。

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