Rob W 的方法有一个替代方法,可以完全屏蔽与页面的任何交互(对于 Chrome)
也就是说,你可以拿出一些重炮使用chrome.debugger。
请注意,使用它会阻止您打开相关页面的开发工具(或者更准确地说,打开开发工具会使其停止工作,因为只有一个调试器客户端可以连接)。 这已得到改进,因为:可以附加多个调试器。
这是一个相当低级的 API;您需要自己使用debugger protocol 构建查询。另外,对应的事件不在1.1文档中,需要看development version。
您应该能够接收此类 WebSocket 事件并检查它们的payloadData:
{"method":"Network.webSocketFrameSent","params":{"requestId":"3080.31","timestamp":18090.353684,"response":{"opcode":1,"mask":true,"payloadData":"Rock it with HTML5 WebSocket"}}}
{"method":"Network.webSocketFrameReceived","params":{"requestId":"3080.31","timestamp":18090.454617,"response":{"opcode":1,"mask":false,"payloadData":"Rock it with HTML5 WebSocket"}}}
This extension sample 应该提供一个起点。
事实上,这里是一个起点,假设tabId 是您感兴趣的标签:
chrome.debugger.attach({tabId:tab.id}, "1.1", function() {
chrome.debugger.sendCommand({tabId:tabId}, "Network.enable");
chrome.debugger.onEvent.addListener(onEvent);
});
function onEvent(debuggeeId, message, params) {
if (tabId != debuggeeId.tabId)
return;
if (message == "Network.webSocketFrameSent") {
// do something with params.response.payloadData,
// it contains the data SENT
} else if (message == "Network.webSocketFrameReceived") {
// do something with params.response.payloadData,
// it contains the data RECEIVED
}
}
我已经测试了这种方法(链接示例如上修改)并且它有效。