我需要在我的扩展程序的chrome选项卡中读取所有js请求的响应正文。 我将调试器附加到webRequest.onBeforeRequest方法中的tab,用于第一个请求类型为" main_frame"和网址" http://localhost:8086/"。
chrome.webRequest.onBeforeRequest.addListener(attachDebugger, { urls: ['*://*/*'] }, ["blocking"]);
这是代码
function attachDebugger(details){
if(!isDebuggerAttached){
tabId = details.tabId
isDebuggerAttached = true
chrome.debugger.attach({tabId:tabId}, "1.2")
chrome.debugger.sendCommand({ tabId:tabId }, "Network.enable");
chrome.debugger.onEvent.addListener(onEvent);
}
}
function onEvent(debuggeeId, message, params) {
if (message == "Network.requestWillBeSent" && params.type == "script") {
console.log("requestWillBeSent =" + JSON.stringify(params))
}
if (message == "Network.responseReceived" && params.response && && params.type == "script"){
chrome.debugger.sendCommand({
tabId: tabId
}, "Network.getResponseBody", {
"requestId": params.requestId
}, function(response) {
// you get the response body here!
});
}
}
我正在获取其发起人脚本但不是解析器的js请求的响应正文。 例如,我只得到login.js的响应主体(Initiator:Script)。
请注意第一次加载我没有收到onEvent的回复消息" Network.requestWillBeSent"对于vendor.js和app.js(发起者:解析器)
但是,如果我重新加载页面,我会收到所有请求的响应正文,并且我会收到回复消息" Network.requestWillBeSent"对于vendor.js和app.js
在为app.js和vendor.js发出请求后,看起来调试器已经附加了,这解释了为什么一切都可以重新加载。
如果我尝试将调试器附加到任何空的选项卡(在加载任何网站之前),我收到此错误“运行debugger.attach时未检查runtime.lastError:无法访问chrome:// URL
何时应该附加调试器?