Tencent/kbone

targeturl被encode两次导致路由解析错误

TiffanyVChou opened this issue · 4 comments

开发工具随便打开一个页面页面参数为:
/pages/home/index?type=${type}&targeturl=${encodeURIComponent(location.href)}
点击开发工具添加当前页为启动页的编译模式,启动参数会在原来targeturl=${encodeURIComponent(location.href)}的基础上又encode一次,导致targeturl被encode两次,或者重新进入当前页面页面的targeturl会被encode两次。再使用路由的时候无法解析对的路径,原来targeturl例如https://www.xxxx.com.cn/xxx, 会被解析成host会被解析成www.xxxx.com.cnhttps,从而导致网络错误,host解析错误,剩下路径解析成/://www.xxxx.com......。

问题是targeturl被encode两次路由解析错误。
小程序报错:Page_Error Error: Network Error
Request URL: https://www.xxx.com.cnhttps
路径参数:/://www.xxxx.com......

build\miniprogram.config.js里的origin已经配置正确。

页面1:

image

页面3:

image

image

写了 demo 试了下,并没有这种情况。你可以看看跳入页面的 location.href 是否正确?如果 location.href 正确的话,就不存在 decode 错误的情况了,可能是其他问题。

encode一次没问题,你试试encode两次,两次之后还对不对。

不是很明白,看你主楼描述的就是只做了一次 encode?如果你拼 targeturl 做了两次 encode,那必定会有问题的,因为这个 targeturl 是给 kbone 内部用,kbone 内部只会做一次 decode 的。你如果想要传 url 过去,可以放到 search 参数中,然后通过 location.search 就可以拿到了。

以下是 kbone 对页面参数的处理逻辑:

image

我观察到有一部分用户是encode两次的targeturl。kbone框架解码一次,判断没有://所以又加了origin,导致了Request URL: https://www.xxx.com.cnhttps/,导致network error,原因找到了,谢谢回复,