我想在uni-app中控制一些页面相关的行为模式,比如在某些情况下禁用下拉刷新,某些情况下开启,使用 WebView.setPullToRefresh 方法没有任何效果呢?貌似其它的 WebView 下的函数也不行,难道 uni 中页面不是使用 WebView 实现的??
怕酸还吃柠檬
- 发布:2018-09-20 12:07
- 更新:2019-03-25 16:20
- 阅读:9039
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