小程序web-view跳转H5页面遇到的问题

需求前提:要求复用H5代码嵌入小程序
方案:使用web-view做跳转
遇到的问题:
1.跳转的H5页面没有返回按钮
解决方案:由于小程序内部的页面挑战是会生成返回按钮的,,有这个原理就可以,首先让小程序由首页跳转的到一个空白页,
然后在这个空白页做一个web-view的跳转,这样就会有返回按钮了,但是这样会产生一个问题。
假如,我们的小程序没有首页,二十一进入小程序就需要跳转到H5页面,那么用这个方法之后就会产生一个问题,当我在H5第一个页面按返回的时候页面出现空白问题,那么如何解决呢?
如下:
小程序首页加上以下代码:

onShow() {
    //如果已经显示过web-view页了,则执行后退操作,否则就跳到web-view页
    if (!app.data.webShowed) {
      wx.navigateTo({
        url: '../webview/index'
      })
    } else {
      wx.navigateBack({
        delta: 1
      });
    }
  }

跳转的web-view页面加上:

onShow: function () {
    wx.showShareMenu({
      withShareTicket: true
    })

    app.data.webShowed = true;
  },

这样就可以了
然后问题又来了,如果我的H5页面需要分享,而且有级H5页面,该怎么做呢
其实我们可以想一个思路,我们分享出去的只能是小程序页面,所以我们要把一个固定的小程序页面分享出去,然后用参数的形式吧H5的地址带过去,当用户点开分享的时候是跳转到我们那个固定的小程序页面的,那么怎么让他调到H5页面呢?
很简单:我们把参数H5的URL通过分享带到了小程序的地址上,我们只需要在那个固定分享的小程序页面获取地址,然后重新用web-view跳转就能实现分享功能了
以下是代码实现:
webview页面分享方法:

  onShareAppMessage: function (options) {
    return {
      title: '分享标题',
      path: `/pages/logs/logs?url=${encodeURIComponent(options.webViewUrl)}` // 分享出去后打开的页面地址
    }
  }

这里有两点需要注意,
1.地址怎么拿到的?其实触发分享事件的时候货返回一个对象,其中就包含了当前页面地址
2.为什么使用encodeURIComponent ?这是因为小程序的地址有长度限制,最大为128个字节,所以我们超过了就会截取一部分,那我们就无法正常跳转了,所以我们使用encodeURIComponent进行编码,然后在固定页面获取后解码
固定分享页代码:

  onLoad(option) {
    this.setData({
      url:decodeURIComponent(option.url)  //通过option接收url
    })
  }

接收到URL之后,给web-view的src赋值

到这里我们的分享页就实现了。

新人码农,欢迎大家纠正错误,谢谢

你可能感兴趣的:(小程序web-view跳转H5页面遇到的问题)