From 35cab6537aca6885923ccf5719fa5f1d217ae672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AF=85?= <1335909236@qq.com> Date: Mon, 15 Sep 2025 14:56:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E6=A3=80=E6=B5=8B=E5=88=B0=20webview?= =?UTF-8?q?=20=E6=95=B0=E9=87=8F=E9=99=90=E5=88=B6=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E5=88=87=E6=8D=A2=E4=B8=BA=20redire?= =?UTF-8?q?ctTo=20=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/index.js | 56 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/utils/index.js b/utils/index.js index a8980585..af6afc01 100644 --- a/utils/index.js +++ b/utils/index.js @@ -8,33 +8,51 @@ export const picUrl = 'https://test.hshuishang.com'; // 图片地址前缀 * @param {String} path - 跳转的目标页面路径 * @param {Object} options - 配置选项对象 * @param {Boolean} options.isLogin - 是否需要校验登录态,默认为 true + * @param {Boolean} options.forceReplace - 是否强制替换当前页面,解决webview数量限制问题,默认为 false */ export const NavgateTo = (path, options = {}) => { - // 首页不需要登录验证 + // 首页不需要登录验证 if (path === '/pages/index/index') { uni.navigateTo({ url: path }); return; } - const { isLogin = true } = options; + const { isLogin = true, forceReplace = false } = options; const ctoken = uni.getStorageSync('ctoken'); - if (isLogin) { - if (!ctoken) { - uni.redirectTo({ url: '/pages/login/login' }) - return - } else { - if (path == '1') { - uni.navigateBack({ - delta: 1 - }) - return - } - uni.navigateTo({ - url: path - }); - return; - } + + // 登录校验 + if (isLogin && !ctoken) { + uni.redirectTo({ url: '/pages/login/login' }) + return + } + + // 返回上一页 + if (path == '1') { + uni.navigateBack({ + delta: 1 + }) + return + } + + // 选择合适的跳转方式 + const navigateOptions = { + url: path, + fail: (err) => { + // 处理webview数量限制错误 + if (err.errMsg && err.errMsg.includes('webview count limit')) { + console.warn('检测到webview数量限制,自动切换为redirectTo模式'); + uni.redirectTo({ url: path }); + } else { + console.error('页面跳转失败:', err); + } + } + }; + + // 如果强制替换,使用redirectTo + if (forceReplace) { + uni.redirectTo(navigateOptions); + } else { + uni.navigateTo(navigateOptions); } - uni.navigateTo({ url: path }) } /**