Javascript Chrome扩展-如何获取HTTP响应正文?
这似乎是一个难题(或不可能??)。 我想在查看Chrome扩展后台脚本的情况下,获取并读取由浏览器中的HTTP请求引起的HTTP响应。 我们可以通过这种方式获得HTTP请求体Javascript Chrome扩展-如何获取HTTP响应正文?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,这似乎是一个难题(或不可能??)。 我想在查看Chrome扩展后台脚本的情况下,获取并读取由浏览器中的HTTP请求引起的HTTP响应。 我们可以通过这种方式获得HTTP请求体 chrome.webRequest.onBeforeRequest.addListener(function(data){ // data contains request_body },{'urls':[]},['requestBody']); 我还检查了这些堆栈溢出 在Chrome扩展中有没有什么聪明
chrome.webRequest.onBeforeRequest.addListener(function(data){
// data contains request_body
},{'urls':[]},['requestBody']);
我还检查了这些堆栈溢出
在Chrome扩展中有没有什么聪明的方法来获取HTTP响应正文?我找不到比这个更好的方法了 答案告诉我们如何获取响应标题并显示在另一个页面中。但是响应对象中没有正文信息(请参阅)。如果您想在没有其他页面的情况下获得响应正文,请尝试此操作
var currentTab;
var version = "1.0";
chrome.tabs.query( //get current Tab
{
currentWindow: true,
active: true
},
function(tabArray) {
currentTab = tabArray[0];
chrome.debugger.attach({ //debug at current tab
tabId: currentTab.id
}, version, onAttach.bind(null, currentTab.id));
}
)
function onAttach(tabId) {
chrome.debugger.sendCommand({ //first enable the Network
tabId: tabId
}, "Network.enable");
chrome.debugger.onEvent.addListener(allEventHandler);
}
function allEventHandler(debuggeeId, message, params) {
if (currentTab.id != debuggeeId.tabId) {
return;
}
if (message == "Network.responseReceived") { //response return
chrome.debugger.sendCommand({
tabId: debuggeeId.tabId
}, "Network.getResponseBody", {
"requestId": params.requestId
}, function(response) {
// you get the response body here!
// you can close the debugger tips by:
chrome.debugger.detach(debuggeeId);
});
}
}
我认为它对我来说已经足够有用了,你可以使用chrome.debugger.detach(debuggeid)
来关闭这个丑陋的提示
对不起,可能没什么帮助…^^ 这绝对不是Chrome扩展生态系统提供的现成功能。但是,我可以找到一些方法来解决这个问题,但两者都有各自的缺点 第一种方法是:
display:none
)元素中的网页DOM中如果您遇到任何问题,请告诉我!:) 现在Chrome开发者工具扩展中有了一种方法,可以在这里看到示例代码: 简而言之,以下是对其示例代码的改编:
chrome.devtools.network.onRequestFinished.addListener(request => {
request.getContent((body) => {
if (request.request && request.request.url) {
if (request.request.url.includes('facebook.com')) {
//continue with custom code
var bodyObj = JSON.parse(body);//etc.
}
}
});
});
没有通用的方法。这只适用于特定的用例。使用
--静默调试器扩展api
命令行切换到浏览器要去除黄条,它必须是浏览器的第一个实例。我从上面的代码制作了一个内容脚本,并在响应体部分添加了console.log和alert,但什么都没有发生。代码应该放在哪里?我收到了无法“附加”到的错误chrome://url. 不管怎样,只附加到特定的url?这是从后台脚本运行还是从内容脚本运行?@evanjmg如果在manifest.json
的权限数组中放置“选项卡”,则可以查询url。在chrome.tabs.query
中,使用函数(tabArray){currentTab=tabArray[0];if(!currentTab.url.startsWith(“chrome:”){chrome.debugger.attach({//debug at current tab.id},version,onAttach.bind(null,currentTab.id));}}
您的文章没有说明如何将响应发送到后台页面,因为注入“chrome.runtime.sendMessage”无效。@Andrew我会检查一下,这篇文章只是为了阅读响应正文。我可以问一下您在哪里使用“chrome.runtime.sendMessage”吗?我试图在注入的内容脚本中使用它,但它(显然)不起作用。文章提到“您可以传递到BG”,所以最好知道如何传递。@Andrew您可以在内容脚本中使用chrome.runtime.sendMessage
。可能还有其他问题。您不能像本文使用自运行函数注入脚本那样在注入脚本中使用chrome消息api。该脚本和扩展之间没有消息传递。从文章本身来看:这种方法的缺点是我们必须始终保持Chrome DevTools打开,因为DevTools扩展只有在DevTools打开时才被激活。