小程序实现H5页面加载一般通过页面内使用<web-view>
组件实现。
有一种场景:
商城H5页面展示之后点击落单需要完成实名登录,登录完成之后跳转落单页面。
一般的做法是先跳转登录,完成之后,通过wx.redirectTo
或wx.navigateTo
等方法跳转到落单页面。事实上这种做法确实能达到效果。
但是如果下一个页面(落单页面)依赖了上一个页面缓存的数据,比如缓存在sessionStorage的数据,就没办法带入到新的页面,因为新页面是新的webview不存在上一个页面缓存的数据。
为了解决这样的问题,我们需要实现不新开webview也能加载页面
。
废话不多,代码如下。
//返回上一页
let pages = getCurrentPages();
let prevPage = pages[pages.length - 2];
if (prevPage.route.indexOf('h5container') !== -1) {
//把需要回传的值保存到上一个页面
prevPage.setURL(decodeURIComponent(this._data.queryParam.targetUrl));
wx.navigateBack({
delta: 1
})
} else {
wx.redirectTo({
url: `/pages/h5container/h5container?targetUrl=${this._data.queryParam.targetUrl}`
});
}
原理:上面的代码主要是拿到上一个H5页面的实例,然后通过调用里面的方法去重新设置页面链接url,然后返回到上一个H5页面。实现效果就是,页面刷新成了新的链接,但是没有打开新的webView页面。
完美解决了上述问题。
暂无评论