uni-app 跳转外链不起作用

uni-app 跳转外链不起作用

开发环境 版本号 项目创建方式
Windows win10 HBuilderX
用途:H5发布方式,用于微信公众号网页展示  

起因:由于要获取用户信息,某些页面必须先做微信授权登录,才能调用后台接口  

现象:在Chrome浏览器里起作用,但在微信真机环境(V8.0.15)不起作用,尝试多种方式(如下)未果  
首先包装了一个request.js用于向后台发请求调用接口  
跳转外链尝试用window.location.href,webview  
1、在页面onload里调用request.get/post之前,没有token先跳转到后台授权链接(微信授权)————Chorme可以,微信不行  
2、在页面onload里调用request.get/post之前,返回错误代码,跳转到后台授权链接(微信授权)————Chorme可以,微信不行  
3、用uni.addInterceptor('request'xxx)拦截请求之前和之后————都不行  
4、在页面onShow中————都可以  

示例代码:
```window.location.href = 'http://www.baidu.com'```

操作步骤:
```md
首先包装了一个request.js用于向后台发请求调用接口  
跳转外链尝试用window.location.href,webview  
1、在页面onload里调用request.get/post之前,没有token先跳转到后台授权链接(微信授权)————Chorme可以,微信不行  
2、在页面onload里调用request.get/post之前,返回错误代码,跳转到后台授权链接(微信授权)————Chorme可以,微信不行  
3、用uni.addInterceptor('request'xxx)拦截请求之前和之后————都不行  
4、在页面onShow中————都可以

预期结果:

应该都可以跳转到外部链接

实际结果:

只有在页面的onShow方法中才起作用,但不能进行统一拦截

更多关于uni-app 跳转外链不起作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在页面onShow中————都可以 —————————————————— 纠正一下,只要是在request.js里做外部跳转,都不行 只有在onShow里手动调用window.location.href才有效

更多关于uni-app 跳转外链不起作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在微信浏览器中,window.location.href 跳转外链在 onLoad 等生命周期中可能被拦截,这是微信浏览器的安全限制。微信浏览器对页面初始加载阶段的跳转(尤其是非用户触发的)有较严格的管控,以防止恶意重定向。

解决方案:

  1. 使用 uni.navigateTouni.redirectTo 跳转到专门处理授权的页面
    在该页面的 onShow 中执行跳转外链的逻辑。因为 onShow 是用户可见页面后才触发,符合微信浏览器的用户交互要求。

  2. 在需要授权的页面,统一在 onShow 中检查 token 并处理跳转
    虽然你提到不能统一拦截,但可以封装一个检查函数,在每个需要授权的页面的 onShow 中调用。

  3. 使用 setTimeout 延迟跳转(临时方案)
    onLoad 中使用 setTimeout 将跳转延迟到下一个事件循环,有时可以绕过限制,但并非100%可靠。

示例代码:

// 在需要授权的页面的 onShow 中
onShow() {
  if (!token) {
    // 跳转到授权链接
    window.location.href = 'https://your-auth-url.com';
  }
}
回到顶部