一场因chrome浏览器调试模式network中设置了offline模式导致的页面调试就会导致数据无法正常加载

居家做个实现小项目,前端功能采用vue.js,后端springboot工程。但是为了方便调试,日常基于chrome浏览器打开来核对当前页面调用的什么接口来辅助排查问题。但是呢,我这个vue工程和springboot启动后,只要不打开chrome检查,就不会出现问题,只要打开检查页面就无法正常加载数据。

一、情形再现


只要打开chrome检查就会出现如上状况,你说奇怪不奇怪。

二、CodeBuddy排查

刚开始发现这个问题,以为是vue.js工程哪儿开启了禁止调试模式,对着代码一堆排查没有解决。

CodeBuddy出来后,我把情况给它反馈一下,对着vue.js和springboot工程一堆源码扫描都没有发现问题。最终我尝试把上述截图告诉它,它立马定位出来问题所在,原来是有个选项导致了(如下图,选择了offline所致)。

我把上述两张检查前后的图抛给CodeBuddy 它分析得出如下结论。

三、豆包排查

假设我没有workbuddy,我有豆包,我尝试描述一下原因,并发给他两张前后截图,看它能分析出来不。

问题根因分析

你遇到的现象是:正常使用系统一切正常,一打开 Chrome 开发者工具(DevTools)就断网、跳 Chrome 离线恐龙页,核心原因是前端代码中检测到 DevTools 打开时,主动触发了断网 / 离线状态,而非真的物理网络故障。

🧠 详细原因拆解

  1. 最常见的触发机制:DevTools 检测 + 离线模拟
    很多前端项目(尤其是你这类生鲜果蔬交易平台的管理系统)会加入反调试 / 防抓包逻辑,核心原理是:
    代码通过 debugger 语句、console.log 检测、window.ondevtoolschange 等方式,判断开发者工具是否被打开
    一旦检测到 DevTools 打开,就执行强制断网逻辑,比如:
javascript 复制代码
运行
// 常见的反调试断网代码
window.addEventListener('devtoolschange', () => {
  // 模拟离线状态
  navigator.serviceWorker.register('/sw.js').then(reg => {
    reg.ready.then(() => {
      // 强制切换为离线模式
      window.navigator.onLine = false;
    });
  });
  // 或直接跳转到离线页面
  window.location.href = 'chrome://dino';
});

你第二张图中 DevTools 的 Network 面板被手动切到了 Offline(离线)模式,也可能是代码自动触发的,导致所有本地请求(localhost:8081)都被拦截,报 ERR_INTERNET_DISCONNECTED

  1. 其他可能的诱因

✅ 分步排查与解决方案

第一步:验证核心问题(排除物理网络)

打开 Chrome,访问 localhost:8081/#/center,确认页面正常

打开 DevTools(F12),不要切到 Network 面板,直接看 Console 面板:

如果出现 debugger 断点、DevTools detected 等日志,说明是反调试代码导致

如果 Console 无异常,直接跳恐龙页,说明是代码强制跳转

第二步:关闭反调试 / 防抓包逻辑(核心解决)

禁用断点:在 DevTools 的 Sources 面板,勾选 Deactivate breakpoints(禁用所有断点),阻止debugger语句触发

拦截反调试代码:在 Console 面板执行以下代码,覆盖检测逻辑:

javascript 复制代码
运行
// 禁用devtoolschange检测
window.removeEventListener('devtoolschange', () => {});
// 强制设置在线状态
Object.defineProperty(navigator, 'onLine', { value: true, writable: false });
// 禁用debugger
(function() {
  var _console = window.console;
  window.console = {
    log: function() {},
    error: function() {},
    warn: function() {},
    info: function() {}
  };
  setInterval(() => {
    debugger;
  }, 100);
})();

永久解决方案:找到项目源码中的反调试代码(通常在main.js、app.js、utils/anti-debug.js中),删除相关逻辑

第三步:修复 DevTools 离线模式

打开 DevTools → Network 面板,将 Offline 下拉框切回 No throttling(无限制)

取消勾选 Disable cache(禁用缓存),避免本地资源加载失败

重启 Chrome,清除缓存后重新访问 localhost:8081

第四步:排查 Vue 路由 / 本地服务问题

你的项目是 Vue 项目(# 路由),检查 router/index.js 中的路由守卫:

javascript 复制代码
运行
// 检查是否有DevTools检测相关的路由拦截
router.beforeEach((to, from, next) => {
  // 若有类似代码,删除即可
  if (window.devToolsOpen) {
    next('/error');
  }
  next();
});

确认本地后端服务(localhost:8081)正常运行,无端口占用、服务崩溃

📌 针对你项目的专属建议

你正在开发的是基于 Spring Boot + Vue 的果蔬商城管理系统,这类项目的前端(Vue)通常会在打包时加入反调试逻辑,防止源码泄露:

开发环境:直接在 Vue 源码中删除反调试代码,本地开发时不会触发

生产环境:如果是打包后的代码,需要通过 Chrome DevTools 的 Sources 面板格式化代码,找到反调试逻辑并禁用

本地调试:使用 vue.config.js 配置 devServer,关闭代理、跨域拦截,避免 DevTools 触发网络异常

💡 补充验证方法

无痕模式测试:打开 Chrome 无痕窗口,访问 localhost:8081,再打开 DevTools:

如果正常,说明是浏览器插件 / 缓存导致的异常

如果依然跳恐龙页,100% 是项目代码的反调试逻辑

换浏览器测试:用 Edge、Firefox 打开系统,再打开开发者工具:

如果正常,说明是 Chrome 专属的反调试代码

如果同样异常,说明是项目通用的反调试逻辑

🎯 最终结论

99% 的概率是项目前端加入了反调试 / 防抓包代码,检测到 DevTools 打开后强制触发离线状态,导致跳 Chrome 离线恐龙页,和物理网络、本地服务无关。

按照上面的步骤,先禁用反调试代码、恢复 DevTools 在线状态,即可解决问题。

四、结论

看来,如果把图发给豆包,它也会能分析出来原因所在。

相关推荐
刘~浪地球6 小时前
Redis 从入门到精通(六):列表操作详解
数据库·chrome·redis
入瘾1 天前
etcd 显示连接失败
数据库·chrome·etcd
Z_Wonderful1 天前
在 Next.js 中,使用 [id] 或 public 作为文件夹或文件名是两种完全不同的概念,分别对应 动态路由 和 静态资源托管
javascript·网络·chrome
油丶酸萝卜别吃1 天前
本地调试跨域问题:关闭 Chrome 同源策略的技巧
前端·chrome
x-cmd1 天前
[x-cmd] 专为 AI Agent 设计的无头浏览器,比 Chrome 速度快 9 倍且少用 16 倍内存 | Lightpanda
前端·chrome·ai·自动化·agent·浏览器·x-cmd
PyHaVolask2 天前
Linux实用工具与技巧
linux·运维·chrome
FreeBuf_2 天前
Chrome 0Day漏洞遭野外利用
前端·chrome
a里啊里啊2 天前
测试开发面试题
开发语言·chrome·python·xpath
OPHKVPS2 天前
VoidStealer新型窃密攻击:首例利用硬件断点绕过Chrome ABE防护,精准窃取v20_master_key
前端·chrome