小程序分享事件中的非业务域名无法识别问题(以taroUI为例)

141 阅读1分钟

问题解析

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是否存在,将地址写死。此方法使用前提,页面路径地址必须具有唯一性,适用性不强,不推荐使用,代码也就不粘了,目前我也没找到更好的方法解决这个问题,欢迎大家评论区留言新的解决方案。