微信小程序wx-open-launch-weapp组件
H5跳小程序的组件
官方文档:微信开放文档
开始配置
这个组件只能在微信内置浏览器里面使用
前期可以用微信开发者工具进行调试(公众号网页模式)
第一步需要在微信公众平台设置JS安全域名
H5一般授权就是通过微信公众号
配置完成引入JS文件
第二步就是配置config
前端需要后端传过来的参数就是这些
后端需要的签名算法签名算法文档
debug建议开启
官方用例
<wx-open-launch-weapp
id="launch-btn"
username="gh_xxxxxxxx"
path="pages/home/index?user=123&action=abc"
>
<script type="text/wxtag-template">
<style>.btn { padding: 12px }</style>
<button class="btn">打开小程序</button>
</script>
</wx-open-launch-weapp>
<script>
var btn = document.getElementById('launch-btn');
btn.addEventListener('launch', function (e) {
console.log('success');
});
btn.addEventListener('error', function (e) {
console.log('fail', e.detail);
});
</script>
这样就可以获取到H5传给小程序的参数了
之前用URL scheme 生成的链接不能动态添加参数
坑的地方,这个组件要用生成或者vue 模板插入,文档没有写
一般错误 url 错误 就是配置域名(公众号)
签名错误 就是微信公众号的appid写错了或者不是服务号还需要认证
后面一定要在真机上运行 模拟器会提示
一定要真机,微信内置浏览器!!!
一定要真机,微信内置浏览器!!!
一定要真机,微信内置浏览器!!!
最后贴上代码,代码只是测试后面可以封装成一个方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#launch-btn {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9;
overflow: hidden;
}
</style>
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
</head>
<body>
<div id='app'>
<div id="launch-btn">
</div>
</div>
<script src='https://cdn.jsdelivr.net/npm/vue@2'>
</script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
const app = new Vue({
el: '#app',
data() {
return {}
},
created() {
this.getWxconfig();
// setTimeout(() => {
this.renderDom()
// }, 2000)
},
methods: {
// 动态渲染微信开发标签 跳转小程序
renderDom() {
var btn = document.getElementById('launch-btn');
console.log('btn', btn)
let script = document.createElement('script')
script.type = 'text/wxtag-template'
script.text =
`<div style="height:100%;width:100%;text-align:center;">
打开小程序</div>`
let html =
`<wx-open-launch-weapp style="width:100%;display:block;height:100%;" username="
小程序的gh原始id" path="跳转小程序地址和参数">${script.outerHTML}</wx-open-launch-weapp>`
btn.innerHTML = html; // html字符串赋值
// 点击按钮 正常跳转触发
btn.addEventListener("launch", function (e) {
console.log("success");
alert(`跳转成功 - ${e.detail}`)
});
// 点击跳转 抛出异常
btn.addEventListener("error", function (e) {
console.log("fail", e.detail);
alert(`跳转异常 - ${e.detail}`)
});
document.addEventListener('WeixinOpenTagsError', function (e) {
console.error(e.detail.errMsg); // 无法使用开放标签的错误原因,需回退兼容。仅无法使用开发标签,JS-SDK其他功能不受影响
});
// return html
},
// h5页面先获取config
async getWxconfig() {
let t = this;
let href = window.location.href;
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
let url = '';
if (isAndroid) {
url = location.href;
console.log('android', url)
}
if (isIOS) {
url = location.href.split('#')[0]; //hash后面的部分如果带上ios中config会不对
console.log('ios', url)
} else {
url = location.href;
}
var params = new URLSearchParams();
params.append('字段', '参数');
axios.post('链接url', params).then(function (res) {
if (res.data.retcode === '0000') {
wx.config({
debug: true,
appId: '公众号的appid',
timestamp: res.data.timestamp,
nonceStr: res.data.noncestr,
signature: res.data.signature,
jsApiList: [""],
openTagList: ['wx-open-launch-weapp']
});
wx.ready(function () {
console.log('初始化成功!')
});
}
}).catch(function (error) {
console.log(error);
});
},
}
})
</script>
<script>
</script>
</body>
</html>