评论

webview跳转小程序的另一种实现

通过监听webview中的url来实现小程序的原生跳转

起因

  • 因为公司业务原因,小程序嵌套了大量的h5页面供;
  • 但涉及到支付类的操作必须在小程序原生页面完成;
  • 这就牵扯了webview跳转原生小程序问题;
  • 我们在线上经常遇到用户投诉;在webview页面点去支付没有反应;
    • 代码逻辑上,这个按钮点击应该跳转原生页面才对的;
    • 我们也在相关页面添加了日志,显示已经触发jssdk成功跳转回掉
    • 但是并没有跳转成功
  • 就在前几天我们又接到用户关于跳转失败投诉;
    • 这种收到反馈,搜集微信日志,联系官方的操作过于被动;
    • 每次都要被公司质量管控部门吐槽,有苦难言;
    • 社区也有不少开发者反馈相关问题;但是偶现bug,官方也不易排查
  • 所以除了等待官方解决我们就没有别的办法了么?

突破

就在我辗转反侧,彻夜难眠的时候,官方文档的一句话吸引了我

  • 每次网页加载都能触发bindload事件获取到url
  • 那么我们能不能指定一个url,获取url上的指定的参数,利用小程序原生能力进行跳转呢

实现

wxml

页面添加bindload事件监听

<web-view src="{{url}}" bindload="load"></web-view>

js

监听url中的变化,检测到指定值执行跳转逻辑

load: function (e) {
    // 获取url
    const src = e.detail.src;
    const query = src.split('?')[1] || '';
    // 检测url参数中是否有指定的参数
    const isJump = query.indexOf('word=jump');
    // 检测到指定值执行跳转逻辑
    if(isJump >= 0){
      wx.navigateTo({
        url: '/index/index'
      })
    }
  }

demo

兼容性的问题

  • 因为公司小程序基础库是2.9.2,大于等于这个版本的可靠性是经过我们线上验证的
  • 低于2.9.2的基础库版本有待考证,可能需要使用者自测
  • 这里给大家提供一种思路,可以结合场景使用
  • 安卓微信8.0.1,出现webview bindload没有执行的情况,这个api在新版本微信上可能有兼容性问题(20210322)
最后一次编辑于  2021-08-13  
点赞 7
收藏
评论

11 个评论

  • 💗
    💗
    08-14

    老哥太猛了,专门登录一下给你点个赞哈哈哈哈哈

    08-14
    赞同
    回复 1
    • WALLE
      WALLE
      09-09
      😊
      09-09
      回复
  • Fury
    Fury
    2023-07-25

    2023年7月,该问题依然存在,我刚刚因为这事挨批。。。

    2023-07-25
    赞同
    回复
  • 佛罗伦丶萨满
    佛罗伦丶萨满
    2022-11-03
    • 安卓微信8.0.1,出现webview bindload没有执行的情况,这个api在新版本微信上可能有兼容性问题(20210322)

    这个安卓微信都到8.0.28,依然不能执行bindload,唉。这个方法也行不通。。。

    2022-11-03
    赞同
    回复 1
    • Fury
      Fury
      2023-07-25
      api在新版本微信上有兼容性问题,是概率性触发的,还是必现的?
      2023-07-25
      回复
  • 华邦网络🍍คิดถึง
    华邦网络🍍คิดถึง
    2022-07-22

    获取的网址能转换为变量么

    ?jump=miniPage&cid=1&agentId=22&miniPage=about

    使用正则取值?

    2022-07-22
    赞同
    回复
  • 华邦网络🍍คิดถึง
    华邦网络🍍คิดถึง
    2022-07-22

    非常不错!

    2022-07-22
    赞同
    回复
  • 风满楼
    风满楼
    2021-12-29

    思路很好,值得参考

    2021-12-29
    赞同
    回复
  • Yuan
    Yuan
    2021-02-22

    请问下你是如何实现监听输入字段的?web-view组件能监听到h5页面输入的东西吗?

    2021-02-22
    赞同
    回复 1
    • WALLE
      WALLE
      2021-02-23
      示例中百度输入文字后点击搜索会触发url的变化,webview的bindload事件可以监听url变化
      2021-02-23
      回复
  • CYX
    CYX
    2021-01-08

    为什么我的页面放在web-view里面就跳不到小程序,单独访问是可以调到小程序的

    2021-01-08
    赞同
    回复 1
    • WALLE
      WALLE
      2021-01-14
      有代码片段么
      2021-01-14
      回复
  • 我胖有罪
    我胖有罪
    2020-12-22

    点赞,新思路

    2020-12-22
    赞同
    回复
  • Laidz
    Laidz
    发表于小程序端
    2020-09-25
    思路惊奇
    2020-09-25
    赞同
    回复 1
    • WALLE
      WALLE
      2020-09-27
      都是用户投诉逼出来的
      2020-09-27
      1
      回复

正在加载...

登录 后发表内容