在小程序其它页面作了操做,数据发生改变,回到webview页面时须要更新webview里面的数据。因为小程序没有提供与webview的实时通讯能力,所以刷新页面是个可考虑的作法。web
最多见的作法,修改一下webview的url,加点query参数什么的,页面就会更新了。可是这会增长webview的浏览history,致使用户在后退的时候,会在webview内退到前一个页面,而不是退到小程序的前一个页面。小程序
在小程序内调用wx.redirectTo(OBJECT)
方法。这里填当前页面的url。实际上是关闭当前页面从新打开,变相达到刷新webview的目的。可是因为从新打开了小程序页面,所以耗时会增长一些。而且,用户会看到前一个页面闪一下,而后出现新页面。异步
首先,让webview作条件渲染:this
<web-view wx:if="{{ webviewUrl }}" src="{{ webviewUrl }}" />
须要刷新时,先把webviewUrl设为空,销毁当前webview。而后再把webviewUrl设为当前值。以下:url
refreshWebview: function () { let tmpUrl = this.data.webviewUrl; this.setData({ webviewUrl: '' }); setTimeout(() => { this.setData({ webviewUrl: tmpUrl }) }, 100); }
这样即可以在不影响导航栏历史的状况下刷新页面,也能够是跳转url。
这里setData以后,页面内容的更新应该是异步执行的,所以咱们后一次修改url须要延时一小段时间,不然会出现error。
猜想setData后页面实际更新应该是在下一次的requestAnimationFrame,所以若是页面彻底不卡顿可能16ms就能够了,保险起见,我设了100ms。code
目前我了解到的状况来看,确实没有一个简单的API能够直接无反作用地刷新小程序webview。方法三是我本身摸索出来的办法。可是总以为这么个简单的问题应该有更直接的作法才对,奇怪。webview