应先通过console确认红色报错定位js异常,无报错则转向扩展或service worker排查;再用debugger暂停获取调用栈锁定问题脚本文件与行号;最后用无痕窗口和单扩展启用法隔离验证肇事扩展。

火狐浏览器弹出“脚本无响应”警告且页面完全冻结时,不能只靠点“停止脚本”蒙混过关——必须精准定位到具体哪段JavaScript正在死循环、重复绑定或DOM操作卡死,否则问题会反复出现在同一网页甚至扩散到其他站点。
先确认是真脚本卡死,不是假警报
按 F12 打开开发者工具 → 切换到 Console 标签页 → 刷新页面。如果顶部出现红色报错行(如 Maximum call stack size exceeded 或 Cannot read property 'addEventListener' of null),说明确实是JS执行异常;若控制台干净无红字,但页面仍卡住,【此时不是脚本问题,应立即转向排查扩展或Service Worker】。
再切到 Network 面板 → 刷新 → 观察是否有大量 pending 状态请求。若有,说明浏览器正卡在等待某个外部JS/CSS资源加载,而非本地脚本执行失控。
用调用栈快速锁定肇事代码
当“脚本无响应”弹窗刚出现时,不要急着点“停止脚本”。保持弹窗开着,立刻切换回开发者工具 → Debugger 标签页 → 点击右上角 暂停脚本执行(⏸️)按钮。
此时左侧调用栈(Call Stack)区域会显示当前阻塞线程的完整函数调用链。从最顶层(Top frame)开始往下看:第一个非系统路径(即不以 chrome:// 或 resource:// 开头)的 .js 文件名和行号,就是问题源头。例如显示 translate.js:427,基本可断定是某个翻译扩展注入的脚本在反复遍历 DOM 节点。
这一步必须在弹窗出现后3秒内完成——超时后Firefox会自动终止脚本,调用栈清空,线索永久丢失。
隔离验证:无痕窗口 + 单扩展启用
按 Ctrl + Shift + P(Windows/Linux)新建无痕窗口 → 地址栏输入目标问题网页地址并回车。
无痕窗口默认禁用所有未勾选“允许在私密窗口中运行”的扩展,天然排除90%的插件干扰。若此时页面响应正常,说明冲突源必在扩展中。
回到普通窗口 → about:addons → 左侧选“扩展” → 按安装时间倒序排列 → 优先启用最近安装的翻译类、脚本注入类、广告拦截类扩展(如“沙拉查词”“Violentmonkey”“uBlock Origin”)。
每次只启用一个 → 切换到无痕窗口刷新问题页 → 若卡死重现,【该扩展即为直接肇事者,无需继续测试】。
强制中断并导出堆栈快照
第一步:在“脚本无响应”弹窗弹出瞬间,不点任何按钮,立即按 Shift + F2 打开浏览器控制台(Browser Console)。
第二步:粘贴执行以下命令:dumpStack() → 回车。控制台将输出当前主线程完整堆栈,包含每个函数的文件路径、行号、调用深度。
第三步:全选输出内容 → 右键复制 → 粘贴到文本编辑器保存。这份快照能清晰暴露是否在 content-script.js 中触发了无限递归,或在 polyfill.js 里因兼容性问题陷入轮询死锁。
注意:此命令仅在弹窗出现时有效,关闭弹窗后命令失效;且必须在 Browser Console(非网页 Console)中执行,否则报错“dumpStack is not defined”。











