今天提测了一个需求后,测试突然说出现了一个诡异的bug,让我重新修改一下:
需求:https://xxx.com/xxx/xxx/7521998550638051363
,这是一个页面链接,需要通过获取7521998550638051363
userId,然后请求接口,接口会返回一个三方链接callBackUrl,然后在打开三方连接;
思路:获取到7521998550638051363
,然后获取到callBackUrl后,使用
const url = decodeURIComponent(callBackUrl);
if(!url) return;
window.location.href = url;
问题:页面会刷新两次,然后第二次域名会变成 https://xxx.com/xxx/xxx/null
;
解决:接口callBackUrl字段没有返回字符返回了一个 null,这时候我判断的 if(!url) return;
是不成立的,因为经过decodeURIComponent(callBackUrl)
会变成字符串 null
,所以每次还是会跳转。
由于window.location.href = 'null';
浏览器会把 'null'
视为相对 URL 跳转,拼接当前页面所在的目录路径后访问,所以就相当于刷新两次,第二层变成了 https://xxx.com/xxx/xxx/null