如何使用 chrome-extension 收听 xhr 响应?

Posted

技术标签:

【中文标题】如何使用 chrome-extension 收听 xhr 响应?【英文标题】:How can I listen to xhr response using chrome-extension? 【发布时间】:2013-12-16 13:08:19 【问题描述】:

我想在某个 chrome 窗口收到 XHR 响应时执行一个函数。

我不知道这个请求到底是什么样的,因为这个请求的编码参数,例如:api.xxx.com/rest?random=123

所以我不认为我可以使用

chrome.devtools.network.onRequestFinished.addListener(function callback)

chrome.webRequest.onCompleted.addListener(function callback)

两者都需要指定请求详细信息。

【问题讨论】:

【参考方案1】:

这些事件的侦听器不需要您指定请求详细信息。相反,它们会在被调用时为您提供这些详细信息。

由于您想监听任何 XHR 请求,您可以定义特殊的 <all_urls> 匹配模式(或 *://*/* 将它们限制为仅 http/https 请求)。

例如:

chrome.webRequest.onCompleted.addListener(function (details) 
  // Process the XHR response.
  ...
, urls: ['<all_urls>']);

不要忘记根据您的要求声明适当的权限。 例如:

// In `manifest.json`:
...
"permissions": 
  ...
  "webRequest",
  "<all_urls>"   // <-- add this to listen for XHR from all pages
]

【讨论】:

非常感谢!我现在可以在响应返回时执行我的函数。但我仍然无法获得预期为 json 的响应正文。看来我需要在详细信息中使用url打开一个get请求> 我不认为webRequest API 可以访问响应正文。您可以访问响应标头和状态代码,仅此而已。 遇到同样的问题,我可以确认您无权访问响应正文。 Firefox 引入了“StreamFilters”,但不幸的是 Chrome 没有实现这个功能。

以上是关于如何使用 chrome-extension 收听 xhr 响应?的主要内容,如果未能解决你的问题,请参考以下文章

CHROME-EXTENSION: chrome.runtime.lastError no tab with id error

请求仅支持协议方案:http、data、chrome、chrome-extension、https

跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https

跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https

为啥 Chrome 本身允许网站访问 chrome-extension://*?

为啥我收到此错误 chrome-extension://invalid