从公众号跳转至小程序页面,页面链接发生变化?原因剖析&解决方案

遇到这个问题的小伙伴有必要先看下下面这篇博文:

为什么小程序内页面跳转传参时,要对参数应用encodeURIComponent编码?

还拿上篇博文中的参数为例,看下从公众号跳转至小程序页面时,接收到的参数是什么样子
  • 小程序内跳转页面时传递url参数,值为https://mp.weixin.qq.com/s__biz=MzAwgxMw==&mid=10076&sn=466da94f#rd,对参数进行encodeURIComponent编码变为https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAwgxMw%3D%3D%26mid%3D10076%26sn%3D466da94f%23rd,所以在小程序中复制出该页面链接为为/pages/document/document?url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAwgxMw%3D%3D%26mid%3D10076%26sn%3D466da94f%23rd
  • 在公众号中做好相应的配置之后,打开小程序调试面板,从公众号中点击链接进入小程序的document页面,打印出接收到的参数为https%253A%252F%252Fmp.weixin.qq.com%252Fs%253F__biz%253DMzAwgxMw%253D%253D%2526mid%253D10076%2526sn%253D466da94f%2523rd,发现参数跟我们复制出来的页面链接中的参数不对。
  • https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAwgxMw%3D%3D%26mid%3D10076%26sn%3D466da94f%23rd做encodeURI编码(或encodeURIComponent编码),结果正好为https%253A%252F%252Fmp.weixin.qq.com%252Fs%253F__biz%253DMzAwgxMw%253D%253D%2526mid%253D10076%2526sn%253D466da94f%2523rd。据此可以推测,在从公众号跳转至小程序时,微信会再次对链接中参数做一次编码(这里的编码具体是encodeURI还是encodeURIComponent不确定,因为我们在小程序中已经做了一次encodeURIComponent编码,没有特殊字符了,此时再次编码,两种方法得到的结果是一样的)
知道了问题产生的原因所在,接下来便是应对之法
// 小程序document页面,解码函数
decode(url){
	let result = decodeURIComponent(url);
	if(/https?:\/\/.*/.test(result)){ // 进行1次解码,若是以http://或者https://开头,直接返回结果
		return result;
	}else{ // 若不是以http://或https://,说明是从公众号跳转过来的,多进行1次解码,返回结果
		result = decodeURIComponent(result);
		return result;
	}
}
  • 在document页面写一个解码函数,对接收到的参数url进行解码。若是小程序内部跳转,只需解码1次便可得到正确的结果;若解码1次得不到期望的结果,说明是从公众号跳转到小程序的,微信多进行了1次加密,此时多进行1次解码,就可得到正确的结果。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值