微信外 H5 跳转小程序——<JumpApp/>组件(vue 项目)
场景
有个 H5(vue 项目),需要实现点击商品 item 跳转到小程序,微信内和微信外都要支持,这里我们只介绍一下 H5 在微信外的跳转。
如图所示,红框内是一个商品,就是点击这里,要跳转小程序:
配置微信小程序云开发(云函数)
1、开通云开发
然后选择免费额度
2、云开发权限设置
找到权限设置,把这里的「未登录用户访问权限」点开
3、新建云函数openMiniapp
这里我们先只需要建个名为openMiniapp
的云函数放在这里就行,它的代码后面再写。
4、修改云函数权限
添加一下这部分配置,注意这里的名称要和云函数的名称一致:
云函数代码
1、编写云函数代码
如果是原生小程序,当配置完云开发+云函数之后,小程序项目目录应该就多出一个云函数的目录(可能叫cloudbase
,但是因为我这里是用的uniapp
,这个目录是自定义的,我设置为wxcloudfunctions
):
云函数的代码:
package.json
:
index.js
:
2、部署云函数
右键,选择创建并部署。
这样云函数的部署就完成了。
H5 部分
1、<JumpApp/>
我的想法是写一个通用组件<JumpApp/>
,不包含任何样式,内容通过<slot/>
传进来,这样后面不管什么样的跳转都可以使用它了。
我可以这样:
也可以这样:
2、介绍 props
附:云环境 id 的位置:
3、关键代码
配置 H5 的云函数 init
window.jumpAppState
因为有时一个页面里,可能会有多个<JumpApp/>
,比如一个需要跳转小程序的商品列表,每个商品 item 都要包裹一个<JumpApp/>
而云函数其实只需要初始化一次,因为云函数是挂到 window 上的。即使是微信内的 H5,每个页面 wx jssdk 也只需要初始化一次。
所以这里增加了个 window.jumpAppState 的变量用来判断当前页面是否正在初始化和是否初始化完成,用 window.location.hash 作为 key,用来区分不同的页面。
调用云函数 openMiniapp,拿到 openLink
我设置的几个变量 isPreConfigFinish
isCanInitWechat
isInitWechatFinish
· isPreConfigFinish 代表 window.tcb 是否 init 完成(如果是微信内的话,代表 wx jssdk 是否 config 完成)
· isCanInitWechat 是否 preConfig 完成,同时外部的一些参数是否准备好了。因为有时我们跳转时携带的参数是异步获取的,比如订单号、商品 code 等,所以设置了一个 props.ready 的变量。只有当 isPreConfigFinish 已经为 true,且一些异步的数据已经拿到即 props.ready 为 true 的时候,isCanInitWechat 为 true
· isInitWechatFinish 代表云函数调用成功了,拿到了 openLink(微信内的话,就是 wxjssdk config 成功,并且<wx-open-launch-weapp/>
已经加到了 html 里)
最终拿到的这个minihref
就是类似这种的地址:"weixin://dl/business/?ticket=slejlsdjlf",我们直接调用 window.location.href = this.minihref 就能触发跳转小程序了。
ok 这样就开发完成了
完整代码
<JumpApp/>
附上微信内 H5 配置 wxjssdk 的代码configWx
最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163 相互学习,我们会有专业的技术答疑解惑
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点 star:http://github.crmeb.net/u/defu不胜感激 !
PHP 学习手册:https://doc.crmeb.com
技术交流论坛:https://q.crmeb.com
评论