问题解析
1、小程序分享事件触发之后,会对url进行加密,从路由获取地址之后,直接使用会造成地址无法识别,出现非业务域名的问题。
2、没有返回自定义内容,用户在小程序内打开,依靠路由获取跳转的路径参数,分享之后二次打开,不存在路由参数,没有跳转路径,也会报非业务域名问题
3、url路径过长,分享之后二次打开url被截断
解决方法
1、使用decodeURIComponent对路由中的url,解码之后使用
2、return一个空对象,onShareAppMessage() api默认一个空对象返回,开发者可以自定义转发内容。
onShareAppMessage() {
const { pageth } = this.state;
// this.url:解码操作
this.url = decodeURIComponent(pageth.params.url || "");
// 返回对象,自定义返回值内容,用户分享之后二次打开后调用
return {
title: "",
path: `/pages/webview/webview?url=${this.url}`,
};
}
componentWillMount() {
// 路由参数获取并存储
const pageth = this.$instance;
this.setState({
pageth: pageth.router,
});
this.url = decodeURIComponent(params.url || "");
this.title = decodeURIComponent(params.title || "");
Taro.setNavigationBarTitle({ title: this.title });
}
3、当传入的url过长,分享之后二次打开时,state中的url被截断,也会造成非业务域名无法识别的问题。可以在分享打开之时通过获取被截断的url,判断这个被截断的url是否存在,将地址写死。此方法使用前提,页面路径地址必须具有唯一性,适用性不强,不推荐使用,代码也就不粘了,目前我也没找到更好的方法解决这个问题,欢迎大家评论区留言新的解决方案。