electron - Electron如何拦截http响应体
问题描述
有没有办法BrowserWindow
在没有调试器的情况下在主进程中拦截 http 响应体?
不能使用WebRequest
类和onCompleted
方法吗?
我可以用调试器做到这一点,但由于某种原因我不能使用它
await w.webContents.debugger.sendCommand('Network.enable')
w.webContents.debugger.on('message', async (event, method, params) => {
if (method === 'Network.dataReceived') {
const responseBody = await w.webContents.debugger.sendCommand('Network.getResponseBody', {requestId: params.requestId})
}
})
UPD
我发现只有一种解决方案 expect debugger
。它并不完美,但它解决了我的问题。
用于webPreference.preload
注入此猴子修补脚本。
let oldXHROpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
this.addEventListener('load', function() {
console.log('data: ' + this.responseText);
});
return oldXHROpen.apply(this, arguments);
}
console.log
可以替换为 ipc 以将此数据发送到主进程
解决方案
推荐阅读
- jestjs - 如何测试返回承诺的异步操作?
- php - 上传文件和内部服务器错误仅适用于一个文件,其他文件都可以
- android - ViewModel 在尝试在没有工厂的情况下重新创建时崩溃
- javascript - ngSwitchCase 没有提供者
- ruby - 如何减少从外部 API 创建 CSV 文件的时间
- java - 如何解决keycloak中类加载器不可见的接口
- nightwatch.js - 在守夜人中,如何在 selenium_port 之后指定其他字符串参数
- d3.js - D3没有设置自己的高度并切断最后一个数据项
- angular - @angular/common 错误 TS2304 找不到名称“未知”
- c# - 带有导航属性的实体框架过程调用