DC_HL
DC_HL
  • 发布:2025-04-30 20:03
  • 更新:2025-05-05 17:40
  • 阅读:429

h5首次进入以及手动输入地址栏uni.addInterceptor无法拦截

分类:uni-app

H5端手动在地址栏更改路由地址uni.addInterceptor没有触发,以及首次进入的页面也不会触发,这个怎么解决
const whiteList = ['/pages/login/login']

const list = ["navigateTo", "redirectTo", "reLaunch"]

function hasPermission(url) {
// 在白名单中或有token,直接跳转
if (whiteList.indexOf(url) !== -1 || uni.getStorageSync("token")) {
return true;
}
return false;
}

list.forEach((item) => {
uni.addInterceptor(item, {
// 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
invoke(e) {
let path = e.url.split('?')[0]
if (hasPermission(path) == false) {
// 将用户的目标路径保存下来
// 这样可以实现 用户登录之后,直接跳转到目标页面
uni.navigateTo({
url: "/pages/login/login",
});
return false;
}
return true;
}
});
})

2025-04-30 20:03 负责人:无 分享
已邀请:
DCloud_UNI_JBB

DCloud_UNI_JBB

您好,麻烦发个可复现demo,以便于更好排查问题

  • DC_HL (作者)

    放下面一条回复里面了,demo在附件,问题描述,麻烦看下

    2025-04-30 20:40

DC_HL

DC_HL (作者) - 试试

demo在压缩包
uni.addInterceptor逻辑为:缓存没有token则跳到login页

首次进入页面 http://localhost:8080/#/ 时发现uni.addInterceptor并没有执行,没有跳到登录页
在地址栏直接http://localhost:8080/#/pages/index1/index1 ,这时候拦截器也没有执行,直接就跳过去了

只有手动点击调用uni.navigateTo才有效,希望官方能解决一下这个问题,因为现在很多系统都是只供内部使用,拦截器很重要,目前是存在问题的,h5也好app也吧,这个都是刚需的

梦尋Junjie

梦尋Junjie - 原来她有男朋友

现在解决没有?

DCloud_UNI_JBB

DCloud_UNI_JBB

h5中直接修改地址栏中的网址不等同于直接调用navigateTo,自然不会触发拦截器

要回复问题请先登录注册