首页 > 解决方案 > 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 以将此数据发送到主进程

标签: electron

解决方案


推荐阅读