小程序实现H5页面加载一般通过页面内使用<web-view>组件实现。

有一种场景:
商城H5页面展示之后点击落单需要完成实名登录,登录完成之后跳转落单页面。

一般的做法是先跳转登录,完成之后,通过wx.redirectTowx.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页面。

完美解决了上述问题。