微信小程序分享页面,decodeURIComponent()解码的参数的问题

AI 概述
相信不少同学在开发微信小程序的开发中,有不少同学涉及到分享的功能,分享 api 我们可以通过查阅微信官方文档知道 onShareAppMessage 方法。 其中这个方法接受一个 path 参数,也就是我们要分享的页面,当 path 带参数时,我们知道 ?后面的参数会被浏览器忽略掉,所以我们一般会对其进行 encodeURIComponent,使用时进...

相信不少同学在开发微信小程序的开发中,有不少同学涉及到分享的功能,分享 api 我们可以通过查阅微信官方文档知道 onShareAppMessage 方法。

其中这个方法接受一个 path 参数,也就是我们要分享的页面,当 path 带参数时,我们知道 ?后面的参数会被浏览器忽略掉,所以我们一般会对其进行 encodeURIComponent,使用时进行相应的 decodeURIComponent 便可。

但是最近却出现一个问题,小程序二次分享页面竟然打不开了,查其原因发现是二次分享时 decodeURIComponent 不起作用。

可是明明拿到参数后 decodeURIComponent 了呀,为何 decodeURIComponent 后的参数还是未解码的:

decodeURIComponent 后的参数还是未解码

诡异的是,第一次分享的时候没有问题,这问题仅出现在二次分享时。

于是,开始一顿排查,终于找到原因 。

原来浏览器对链接带的参数又编码了一次,解码的时候需要解两次码才能得到原先的数据 。

于是我三下五除二又加了一层解码,立马进行验证:

 const { url = "" } = this.$router.params;
 const webUrl = `${HOST}${decodeURIComponent(decodeURIComponent(url))}`;

惊喜,二次分享成功打开页面,打印出来的参数也是正常解码后的参数。

但是我立马又联想到,三次四次五次等以上分享呢,果断测试了一下,上面的代码果然不顶用,这就要求我们进行一个判断了。

我这边用到了递归来解决,具体实现如下:

getUrl (url) {
    if (url.indexOf('%') < 0) {
      return url
    } else {
      const newUrl = decodeURIComponent(url)
      return this.getUrl(newUrl)
    }
}

const { url = "" } = this.$router.params;
const webUrl = `${HOST}${getUrl(url))}`;

当然,小伙伴们还可以通过循环去解决,道理是一样的。

原文:链接

以上关于微信小程序分享页面,decodeURIComponent()解码的参数的问题的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

2

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 微信小程序分享页面,decodeURIComponent()解码的参数的问题

发表回复