怕酸还吃柠檬
怕酸还吃柠檬
  • 发布:2018-09-20 12:07
  • 更新:2019-03-25 16:20
  • 阅读:9039

uni-app 中无法调用 WebView 相关的任何方法吗?

分类:uni-app

我想在uni-app中控制一些页面相关的行为模式,比如在某些情况下禁用下拉刷新,某些情况下开启,使用 WebView.setPullToRefresh 方法没有任何效果呢?貌似其它的 WebView 下的函数也不行,难道 uni 中页面不是使用 WebView 实现的??

2018-09-20 12:07 负责人:无 分享
已邀请:
Neil_HL

Neil_HL

uniapp是通过webview实现的,通过下面的方法拿到当前的webview,得到了currentWebview ,你就可以对它进行操作了。

var currentWebview = function () {  
    if (plus.webview.getTopWebview().id == plus.runtime.appid) {  
        return plus.webview.getDisplayWebview()[1];  
    }  
    else{  
        return plus.webview.getTopWebview();  
    }  
}();
  • 怕酸还吃柠檬 (作者)

    @372360 你好,非常感谢你的回复。该代码确实能获得页面的WebView对象并操作,但是,经过测试发现 getTopWebview() 方法始终获取的是上一个页面的WebView对象,例如页面栈如下:A => B => C,C是当前页面,在C页面中执行以上代码(getTopWebview())获取到的页面WebView对象为 B 页面。

    不知是调用的姿势不对还是在uni中有bug。

    注:在 Android , iOS 中测试均有该问题!!!

    2018-09-20 15:24

  • Neil_HL

    回复 怕酸还吃柠檬:在onShow、onLoad的时候确实有问题,避开这两种情况就可以了,后续我们会提供想法暴露当前webview的

    2018-09-20 15:42

  • 怕酸还吃柠檬 (作者)

    回复 Neil_HL: 好的,针对这个问题,是否是 onShow, onLoad 时当前页面还未推入页面栈中导致的?

    另附解决方案:在刚才已经获取到(上级)页面WebView的基础上,在其 "id" 上自增 1(我发现现在WebView的Id是数字自增标识),然后同个getWebviewById() 获取能获取到当前页面,测试时可行,不知该方式在复杂的页面栈关系中是否适用?!

    2018-09-20 15:48

  • Neil_HL

    回复 怕酸还吃柠檬:下个版本我们应该会提供方法得到当前webview的id

    2018-09-20 15:54

  • 怕酸还吃柠檬 (作者)

    回复 Neil_HL:好的,感谢

    2018-09-20 15:58

  • Neil_HL

    回复 怕酸还吃柠檬:你现在可以使用getCurrentPages() 得到页面栈,拿到最后一个页面,调用$getAppWebview()就可以得到当前的那个webview,文档稍后会更新:http://uniapp.dcloud.io/frame?id=getcurrentpages

    2018-09-20 16:35

  • 怕酸还吃柠檬 (作者)

    回复 Neil_HL:收到,已测试可用,谢谢!

    2018-09-20 18:03

小明子

小明子

也就是说uniAPP的5+SDK集成方式还是webview方式了,多webview页面模式,不是widget模式。那么有一个问题想问一下,打开页面较多的话,性能降低怎么办? 比如业务流程:A=>B=>C=>D...=>H,打开很多页面,B页面可能会存在子webview页面。这个时候会出现卡顿现象。个人感觉多webview页面还是会存在这个问题的。

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