资讯专栏INFORMATION COLUMN

「前端早读君009」快速小程序开发之微信小程序内嵌 H5

wh469012917 / 588人阅读

摘要:前言微信小程序中可以直接运行页面,这一新组件的产生,可能直接导致小程序数量迎来一波高峰。微信小程序配置系列问题配置域名业务域名中配置的就是小程序以及和中引用的域名。

今日励志语

要接受自己行动所带来的责任而非自己成就所带来的荣耀。

前言

微信小程序中可以直接运行 web 页面,这一新组件 web-view 的产生,可能直接导致小程序数量迎来一波高峰。本篇博文将从业务选型,微信小程序后台配置,使用 web-view 完成登录业务以及在实战中如何调试一次性带你感受小程序内嵌 H5 的风采,帮你更有底气的使用微信小程序新组件 web-view。

技术选择 H5 转成小程序方案路线优缺点对比

上表是从原有 H5 转相似业务逻辑的微信小程序的方案路线优缺点对比,基于时间的限制以及当前主流多端编译的可靠性考量,最终团队认为通过使用小程序组件 web-view 内嵌 H5 的方式比较适合当前的开发需求。 web-view 的兼容性问题主要是要在基础库在1.6.4+及以上才可以用,而微信官方统计基础库在1.6.4+ 的覆盖率已达 95% 以上,这个指标也符合产品大人的要求,于是便愉快的选择了 web-view 内嵌 H5 的技术方案。

H5 和小程序技术对比

从上表中可以对比出 H5 相较于小程序的优缺点,方便各位前端大大评估需求。尤为重要的是因为小程序封装的比较严重所以小程序开发的灵活性没有 H5 那么高,这就要我们注意对交互设计的评估。

web-view 微信小程序配置系列问题

配置域名

业务域名中配置的就是小程序以及 H5 和 H5 中引用 iframe 的域名。这里要特别注意的是假如 H5 中有内嵌的 iframe 也要配置进去
这里需要服务端的朋友配合一下,将校验文件放置在将要嵌套的业务域名的根目录。所以要注意后端是否可以支持,否则会有各种扯皮的问题

选择基础库

开发的时候不要忘记配置微信小程序的基础库,注意 web-view 要在基础库1.6.4以上的版本库才能使用

H5 中引入微信的 jssdk,其中包含了h5和小程序直接的通讯方法

web-view 与小程序的通信

官方给出了两种通信方法(如下图所示) 1、postMessage 通信 在 H5 中需要先用 wx.miniProgram.postMessage 接口,把需要分享的信息,推送给小程序。 在用户点击了小程序后退、组件销毁、分享这些特殊事件之后,小程序页面通过 bindmessage 绑定的函数读取 post 信息。 2、设置 web-view 组件的 URL 通信 H5 跳转小程序:

toWeixin() {
 wx.miniProgram.navigateTo({url: "/pages/myWelfare/myWelfare"});
}

小程序跳转 H5: 首先在 .wxml 中引入 web-view 组件



之后在小程序的 js 文件中设置通过 URL 以问号传参的方式传入参数到 H5 中

if(!option.page){
      this.setData({
        url: `${this.data.url}?${test}`
      });
    } else {
      this.setData({
        url: `${this.data.url}${option.page}?${test}`
      });
    }
小程序内嵌 H5 登录实例

小程序登录实现方案流程图:

如上图所示:整个登录的 cookie 的传递经历了四个步骤:

在小程序登录后获取到后端传递的 cookie 并保存
通过 web-view 中的 url 传递到 H5 中
在 H5 中得到传递的值并写到 cookie 中
在访问接口的时候带上 cookie 2、从微信小程序响应头中获得 cookie 存到 storage 中:
首先在登录页获取到响应头中的登录 cookie 放到 storage 中

wx.setStorageSync("cookie", res.header["Set-Cookie"]);

在微信小程序中每次请求接口的时候,将 storage 中的 cookie 取出来,放到请求头中,如果传入不正确或者没有传入 cookie 值,后台将返回 errorCode 为 3002 ,此时前端跳转到登录页面。

 var headerCookie = wx.getStorageSync("cookie");
   wx.request({
            url: murl,
            data: parameter.data || {},
            header: {
               "Cookie": headerCookie
            },
            method: parameter.method || "POST",
            success: function(res) {
            if(res.data.code == 3002) {
                    wx.redirectTo({
                        url: "../login/login"
                    })
                } else {
                    parameter.success && parameter.success(res);
                }

            }

3、获得 cookie 并拼接到 URL 中
首先在 web-view 页面获取 cookie ,并匹配到需要传递的字段,之后将此字段放到 url 中通过问号传参的方式传递到 H5 中

try {
      var value = wx.getStorageSync("cookie");
      if (value) {
        test = value.match(new RegExp("(^| )"+"jxi-m-sid"+"=([^;]*)(;|$)"))[2] ;
      }
    }
url: "https://www.xxx.com#",
    if(!option.page){
      this.setData({
         //在这里放入传递的字段(如test)
         url: `${this.data.url}?${test}`
      });
    } else {
      this.setData({
         //在这里放入传递的字段,也可以拼接更多的信息(如option.page)
         url: `${this.data.url}${option.page}?${test}`
      });
    }

4、获取 cookie 并在 H5 中使用 在 H5 中获取 cookie 值,并带入 cookie ,注意 domain 和 path 的设置,这两个值必须都有:

let isDebug = (window.location.href).indexOf("myf") > -1;
let host = isDebug ? "jd" : "jdf";
//获得传递的字段
let c =window.location.href.split("?")[1];
//设置cookie
document.cookie = `jxi-m-sid=${c};domain=${host};path=/`;
小程序内嵌 H5 调试解决方案

关于调试效果缓存的问题 小程序的更新机制即当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是 5 分钟)会被微信主动销毁。 小程序销毁后再重新启动时如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次销毁后再重新启动时才会应用上。

内嵌 H5 调试问题 因为微信小程序开发者工具中并没有提供内嵌 H5 的调试工具,所以我们可以采取以下方法调试

在 H5 开发的时候,我们可以在微信小程序开发者工具中找到 web-view 传递给 H5 的 URL 链接将此链接黏贴到浏览器中即可像平时开发 H5 一样调试
对于手机端 H5 的测试调试可以在 H5 中引入 vconsole 这个插件来调试程序,他可以让我们看到接口情况以及 H5 中的日志。

总结

看到这里,我们分别从

web-view 技术的优缺点

web-view 微信小程序配置系列问题

web-view 与小程序的通信

小程序内嵌 H5 登录实例

小程序内嵌 H5 调试解决方案

五个方面梳理了关于微信小程序 webview 组件的使用。 当然,微信小程序组件 web-view 还并不完善,其中很难实现一些特殊的交互,比如返回按钮返回的页面只能是上一级不能是任意自定义的页面等问题,这就需要我们更好的沟通以及规划交互设计,同时反馈并等待微信小程序官方的更新和支持。

文章来源:京东设计中心


打开微信扫一扫关注早读君,每天早晨为你推送前端知识,度过挤地铁坐公交的时光

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100677.html

相关文章

  • 前端资源系列(3)-微信小程开发资源汇总

    摘要:微信小程序应用号开发资源汇总文档工具教程代码插件组件文档从搭建一个微信小程序开始小程序开发文档小程序设计指南工具小程序开发者工具官方支持微信小程序实时预览的支持的微信小程序组件化开发框架转在线工具小程序云端增强社区微信小程序 微信(小程序or应用号)开发资源汇总-文档-工具-教程-代码-插件-组件 文档 从搭建一个微信小程序开始 小程序开发文档 小程序设计指南 工具 小程序开发者...

    paney129 评论0 收藏0
  • 微信应用号(小程)资源汇总(1010更新)

    摘要:微信应用号小程序资源汇总。每天不定期整理和收集微信小程序相关资源,方便查阅和学习,欢迎大家提交新的资源,完善和补充。 wechat-weapp-resource 微信应用号(小程序)资源汇总。 每天不定期整理和收集微信小程序相关资源,方便查阅和学习,欢迎大家提交新的资源,完善和补充。 showImg(https://segmentfault.com/img/remote/1460000...

    赵春朋 评论0 收藏0

发表评论

0条评论

wh469012917

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<