import { browser } from 'webextension-polyfill-ts'
// You can use `browser`/`chrome` here and interact with extension stuff like storage and tabs.
const s = document.createElement('script')
s.src = browser.extension.getURL('scripts/injected.js')
s.onload = async function () {
(this as any).remove()
};
(document.head || document.documentElement).appendChild(s)
脚本/注入的. js:
// You CANNOT use `browser`/`chrome` here and you CANNOT interact with extension stuff like storage and tabs.
const XHR = XMLHttpRequest.prototype
const open = XHR.open
const send = XHR.send
const setRequestHeader = XHR.setRequestHeader
XHR.open = function () {
this._requestHeaders = {}
return open.apply(this, arguments)
}
XHR.setRequestHeader = function (header, value) {
this._requestHeaders[header] = value
return setRequestHeader.apply(this, arguments)
}
XHR.send = function () {
this.addEventListener('load', function () {
const url = this.responseURL
const responseHeaders = this.getAllResponseHeaders()
try {
if (this.responseType != 'blob') {
let responseBody
if (this.responseType === '' || this.responseType === 'text') {
responseBody = JSON.parse(this.responseText)
} else /* if (this.responseType === 'json') */ {
responseBody = this.response
}
// Do your stuff HERE.
}
} catch (err) {
console.debug("Error reading or processing response.", err)
}
})
return send.apply(this, arguments)
}
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (details.url.includes("example.com")) {
// Do something here
}
},
{urls: ["<all_urls>"]}
);
3条答案
按热度按时间elcex8rz1#
chrome.webRequest是有用的,但它不允许您读取Chrome中的响应正文。
我做了一个扩展,它使用一个由内容脚本注入到页面中的脚本拦截所有Web请求。https://github.com/onhello-automation/onhello/tree/main/app/scripts.
我使用了https://stackoverflow.com/a/48134114/1226799来帮助编写此代码,但我更正了其中的一些问题并简化了它。
一些相关部分:
manifest.json
scripts/content_script. ts(我使用webextension-toolbox构建并将TypeScript编译为JavaScript)
脚本/注入的. js:
dluptydi2#
也许这就是你要找的http://code.google.com/chrome/extensions/trunk/experimental.webRequest.html#examples
5anewei63#
您可以使用Chrome webRequest API来拦截和监控网络请求。此API允许您监听不同的事件:在请求之前、发送标头之前、接收标头时、完成时、和在发生错误时。
chrome.webRequest.onBeforeRequest事件侦听器添加到扩展中
记住在manifest.json文件中声明webRequest权限:
你也可以尝试一些网络嗅探器,如集成到浏览器中的WebQSEE。