我正在研究Firefox扩展(WebExtension),作为其功能之一,它需要从网络请求资源并覆盖响应标头,尤其是那些控制浏览器如何处理响应的标头(例如,应从以下位置删除gzip编码)内容编码以检索“原始”响应)。

问题是我找不到扩展程序发出的拦截请求的方法。这在Chrome浏览器中工作正常,我可以拦截用户直接发出的请求。

此问题影响所有webRequest处理程序,但该示例适用于onHeadersReceived(简化为最低要求):

function OnHeadersReceived(details){
    console.log('Received headers for ' + details.url);
}

chrome.webRequest.onHeadersReceived.addListener(OnHeadersReceived, { urls: ['<all_urls>'] });


这是一个非常简单的请求示例:

fetch('http://www.alexa.com')


同样的问题适用于XMLHttpRequest

任何对此问题的见解都将受到赞赏。我知道Chrome浏览器不允许拦截源自其他扩展程序的请求,但不能阻止源自您自己扩展程序中的请求。

更新

在BugZilla上发现错误:WebExtensions: webRequest listeners do not fire for XMLHttpRequest requests generated by the extension

最佳答案

如果有人怀疑,这是Firefox中的问题,并且已在版本52中修复。
现在,所有来自Web扩展的请求也将被这些扩展中的处理程序拦截。

10-06 14:13