uni-app微信分享onShareAppMessage方法return路径中设置的参数设置不成功
uni-app微信分享onShareAppMessage方法return路径中设置的参数设置不成功
问题描述
环境:微信小程序
使用场景:在需要分享的页面使用button open-type="share"组件触发分享事件onShareAppMessage,设置return {},在onLoad(options){}方法获取options中的参数出现bug。
注意:第一次分享页面,点击分享链接进入时能正确获取options中的id=1参数,但是第二次分享该页面同时在onShareAppMessage方法的return中设置id=2,则在onLoad方法的options中获取id还是1,并不是第二次设置id=2。
请帮忙看下这是不是uni-app的bug。
代码示例
<button open-type="share" class="btn btn-share">我也想分享助力</button>
onLoad: function (options) {
let id = options.id; // 点击第二次分享的链接进入应该获取到id=2,但是怎么设置都是id=1
let source = options.source || 0;
console.log("onLoad.id:" + id);
console.log("onLoad.source:" + source);
},
onShareAppMessage: function (res) {
let that = this;
let source = that.$data.source;
if (source == 0) {
return {
title: '0元包邮,就差你啦!',
path: '/pages/marketing/help_free_shipping/index?source=1&id=1'
}
} else {
return {
title: '0元包邮,就差你啦!',
path: '/pages/marketing/help_free_shipping/index?source=1&id=2'
}
}
}
更多关于uni-app微信分享onShareAppMessage方法return路径中设置的参数设置不成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用原生的微信小程序测试一下是否有同样问题?
更多关于uni-app微信分享onShareAppMessage方法return路径中设置的参数设置不成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html
微信小程序会同步修复这个bug的吧 [握手]
回复 w***@126.com: 之前的回复错了(当成另外一个问题了)。已修改回复。
这不是uni-app的bug,而是微信小程序的页面缓存机制导致的。
问题分析:
- 微信小程序在页面跳转时会优先使用缓存中的页面实例
- 当分享链接指向同一个页面路径时,即使参数不同,小程序可能不会创建新的页面实例,而是复用已存在的实例
- 这种情况下,
onLoad方法不会重新执行,导致无法获取到新的参数
解决方案:
方案一:使用onShow替代onLoad
onShow: function() {
const currentPages = getCurrentPages();
const currentPage = currentPages[currentPages.length - 1];
const options = currentPage.options;
let id = options.id;
let source = options.source || 0;
console.log("onShow.id:" + id);
console.log("onShow.source:" + source);
}
方案二:监听页面参数变化
data() {
return {
currentId: '',
currentSource: 0
}
},
onLoad: function(options) {
this.updateParams(options);
},
onShow: function() {
const currentPages = getCurrentPages();
const currentPage = currentPages[currentPages.length - 1];
this.updateParams(currentPage.options);
},
updateParams(options) {
if (options.id !== this.currentId || options.source !== this.currentSource) {
this.currentId = options.id;
this.currentSource = options.source || 0;
console.log("currentId:" + this.currentId);
console.log("currentSource:" + this.currentSource);
// 执行相关业务逻辑
}
}
方案三:强制页面重新加载 在分享路径中添加时间戳或随机数:
onShareAppMessage: function(res) {
let that = this;
let source = that.$data.source;
const timestamp = new Date().getTime();
if (source == 0) {
return {
title: '0元包邮,就差你啦!',
path: `/pages/marketing/help_free_shipping/index?source=1&id=1&t=${timestamp}`
}
} else {
return {
title: '0元包邮,就差你啦!',
path: `/pages/marketing/help_free_shipping/index?source=1&id=2&t=${timestamp}`
}
}
}

