Firefox中需注入JS监听WebSocket收发:①补丁原型捕获new实例的send/onmessage;②重写构造函数拦截动态创建连接;③用网络监视器导出JSON消息。

要在火狐浏览器中直接查看 WebSocket 长连接的实时通信数据,必须绕过 Network 面板的帧列表限制,用 JavaScript 注入监听逻辑捕获原始 send 和 onmessage 行为——因为 Firefox 控制台默认不打印 WebSocket 消息,只有主动劫持原型方法或重写构造函数,才能让每条收发数据原样输出到控制台。
给 WebSocket 原型打补丁,捕获所有新建实例的收发日志
这一步适用于页面未封装 WebSocket 创建逻辑、且后续连接均由 new WebSocket() 触发的场景。它会修改全局 WebSocket.prototype,对所有新创建的实例生效,但【不会影响已存在且 onmessage 直接赋值为箭头函数或匿名函数的实例】。
在 Firefox 控制台(Ctrl+Shift+K)中粘贴并执行以下代码:
const originalSend = WebSocket.prototype.send;WebSocket.prototype.send = function(data) { console.log('[WS →]', data); return originalSend.apply(this, arguments); };WebSocket.prototype._originalOnMessage = WebSocket.prototype.onmessage;WebSocket.prototype.onmessage = function(event) { console.log('[WS ←]', event.data); if (this._originalOnMessage) this._originalOnMessage.call(this, event); };
刷新页面,触发 WebSocket 重建;或等待服务端推送、手动调用 ws.send(),即可在控制台看到带方向标识的明文日志。
重写 WebSocket 构造函数,捕获动态创建或闭包内的连接
当页面使用 SDK 封装、动态 URL 或 WebSocket 实例被赋值给局部变量时,仅 patch prototype 会漏掉部分连接。此时必须拦截 new WebSocket() 调用本身,确保每个 socket 实例从诞生起就被监听。
方法一:在控制台执行完整重写逻辑
const OriginalWebSocket = window.WebSocket;window.WebSocket = function(url, protocols) { const ws = new OriginalWebSocket(url, protocols); console.log('[WS new]', url); ws.addEventListener('open', () => console.log('[WS open]', url)); ws.addEventListener('message', e => console.log('[WS ←]', e.data)); ws.addEventListener('close', e => console.log('[WS close]', e.code, e.reason)); ws.addEventListener('error', e => console.error('[WS error]', e)); return ws; };
方法二:更轻量的事件绑定替代(避免覆盖构造函数)
(function() { const orig = window.WebSocket; window.WebSocket = function(...args) { const ws = new orig(...args); ['open', 'message', 'close', 'error'].forEach(evt => ws.addEventListener(evt, e => console.log(`[WS ${evt}]`, evt === 'message' ? e.data : e))); return ws; }; })();
执行后立即生效,无需刷新;已有连接不受影响,但所有后续 new WebSocket() 都会被捕获。
用网络监视器定位连接并导出帧数据
第一步:打开网络监视器 → Ctrl+Shift+E → 点击顶部“过滤器”漏斗图标 → 勾选“WebSocket”
第二步:在请求列表中找到 ws:// 或 wss:// 开头的条目 → 单击选中 → 切换右侧面板至“消息”标签页
第三步:若消息为空,尝试触发一次发送操作或刷新页面;确认后可右键某帧 → “复制消息内容” → 粘贴至编辑器分析
第四步:如需结构化导出,点击“消息”页右上角三个点 → “导出全部消息为 JSON” → 保存为 .json 文件供离线解析


















