小程序webview 的一些问题记录 webview 小程序支付 webview 小程序分享

小程序内嵌webview

碰到的问题

  • webview 中的 h5 不能使用sdk 的微信支付

  • 页面的返回前进相关问题

  • 小程序转发

  • 页面的返回前进相关问题

在h5 端使用sdk 提供的api 跳转到小程序中的页面,并将url 以url参数的形式传过去

 function navigateToWebWiew(replaceHash) {
      // h5中的方法 
      let nowHash = window.location.hash
      let webwiewUrl = window.location.href.replace(nowHash, replaceHash)
      wx.miniProgram.navigateTo({
        url: `/pages/webwiew/webwiew?url=${encodeURIComponent(webwiewUrl)}`
      })
    }

h5 跳转时,一般还需要区分小程序 和 h5 环境
文档有提供案例


// 我的
let isApplets = window.__wxjs_environment === 'miniprogram'
  if( isApplets === true ){  // if(isApplet) 结果不一致 ,没整明白
    isApplet = true 
  }else{
    isApplet = false
  }

// 跳转时根据条件判断到底是要跳小程序页面还是正常路由
onClick={e => { isApplet ? window.navigateToWebWiew('/orderdetail') : history.push('/orderdetail') }}

这样就简单的解决小程序中页面返回问题
新问题来了,小程序的页面栈有限,最多十层
没有搬到啥好方法

// 菜鸡做法
 if (getCurrentPages().length > 9) { // 如果当前页面栈 大于 9 , 挺影响体验的,不过在适合的地方配合 redirectTo 等 一般不会达到这么多
      wx.reLaunch({
        url: '../webwiew/webwiew?url=' + options.url,
      })
    } else {
      this.setData({
        url: decodeURIComponent(options.url)
      })
    }

支付问题

思路和跳转页面差不多
将支付相关参数传到 小程序的支付页(如 pay.js)
请求后端的支付配置接口得到小程序支付api 需要的相关参数
请求完事
常见问题都是支付参数错误

小程序转发分享

转发分享一般都需要带上标题,如商品 标题
许多人做法是从 onload 的 option.url 中 正则出 如 商品id
其实可以直接在分享转发的函数里拿到 h5 当前页面的url

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

    let id = options.webViewUrl.match('正则')
    let title = '默认标题'
    if (id) {
      title = await this.getTitle(id[1])
    }
    return {
      title,
      path: 'pages/webwiew/webwiew?url=' + encodeURIComponent(options.webViewUrl)
    }
  }

原文地址:https://www.cnblogs.com/duoban/p/13902613.html