需求:做一个H5宣传页面,可以像卡片一样在微信里面转发
遇到问题:
1、没有设置JS安全域名,会报:config:fail,invalid url domain(去公众号里配置)
2、jsApiList的长度为0,(初始化执行的太快,没拿到)
3、微信中点击链接无法显示图片、标题、描述等
4、更新后手机缓存问题(据同事说,在路径后面加一个随机参数就可以避免这个问题,我没改,我实在是被第三个问题搞呕了,不想改了)
第三个问题是我找了很久的bug,后面看到一个简书上的博主的文章,才找到解决办法:https://www.jianshu.com/p/c462d0103ead
不可以直接在微信内点击H5链接地址,必须是通过微信公众号下方链接点击,或者通过扫码进入,才能正常显示分享样式。
可以参考一下这个博主,我后面使用的是扫二维码打开
可怜我一直以为是自己的问题,还找了很久的bug,不说了,说多了都是泪~
写的不好的地方请见谅,这里单纯给自己做笔记了
参考代码:
<template>
<view>
<swiper :style="'height: '+ screenHeight +'px;'" class="swiper" :vertical="true" >
<swiper-item>
<image src="/static/img/01.jpg"></image>
</swiper-item>
<swiper-item>
<image src="/static/img/02.jpg"></image>
</swiper-item>
</swiper>
</view>
</template>
<script>
import jweixin from "jweixin-module"
export default {
data() {
return {
screenHeight:0,
}
},
created() {
this.screenHeight = uni.getSystemInfo().screenHeight ? uni.getSystemInfo().screenHeight : 800
},
onLoad() {
this.wxShare()
},
methods: {
wxReady() {
jweixin.ready(function() {
jweixin.onMenuShareAppMessage({
title: '', // 分享标题
desc: '', // 分享描述
link: ``, // 分享链接
imgUrl: '', // 分享图标
success: res => {
// 用户确认分享后执行的回调函数
console.log(res)
console.log('分享成功')
},
cancel: res => {
// 用户取消分享后执行的回调函数
console.log(res)
console.log('bbbbbbb')
},
fail: res => {
console.log(res)
console.log('cccccc')
}
});
jweixin.onMenuShareTimeline({
title: '', // 分享标题
link: ``, // 分享链接
imgUrl: '', // 分享图标
success: res => {
// 用户确认分享后执行的回调函数
console.log(res)
console.log('分享成功')
},
cancel: res => {
// 用户取消分享后执行的回调函数
console.log(res)
console.log('bbbbbbb')
},
fail: res => {
console.log(res)
console.log('cccccc')
}
});
jweixin.onMenuShareTimeline({
title: '', // 分享标题
link: ``, // 分享链接
imgUrl: '', // 分享图标
success: res => {
// 用户确认分享后执行的回调函数
console.log(res)
console.log('分享成功')
},
cancel: res => {
// 用户取消分享后执行的回调函数
console.log(res)
console.log('bbbbbbb')
},
fail: res => {
console.log(res)
console.log('cccccc')
}
});
jweixin.onMenuShareAppMessage({
title: '', // 分享标题
desc: '', // 分享描述
link: ``, // 分享链接
imgUrl: '', // 分享图标
success: res => {
// 用户确认分享后执行的回调函数
console.log(res)
console.log('分享成功')
},
cancel: res => {
// 用户取消分享后执行的回调函数
console.log(res)
console.log('bbbbbbb')
},
fail: res => {
console.log(res)
console.log('cccccc')
}
});
});
},
wxShare() {
let that = this
const Api_url='https:xxxx'
var surl = encodeURIComponent(window.location.href.split('#')[0]); //据说可以解决URL中带参数的问题,前台用的js编码,后台解码
uni.request({
url: Api_url + '接口',
method: 'POST',
header: {
'token': '',
'usertype': 1,
'content-type': 'application/x-www-form-urlencoded' //post一定要带这个header,被这里坑了半天
},
data: {
url: surl
},
success: res => {
jweixin.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: res.data.data.appId, // 必填,公众号的唯一标识
timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.data.data.nonceStr, // 必填,生成签名的随机串
signature: res.data.data.signature, // 必填,签名,见附录1
surl: res.data.data.url, //自己添加的,debug为true的时候可以网页打印出对应的URL是否正确
jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','updateTimelineShareData','updateAppMessageShareData']
});
that.wxReady()
},
fail: error => {
console.log('request fail', error);
},
complete: () => {}
});
},
}
}
</script>
<style lang="scss" scoped>
</style>