我想创建一个电子应用程序,该应用程序将使用webview显示第三者的内容。
我希望能够拦截来自该Web视图的所有请求和响应。有时我想操纵这些内容,有时我想记录它,而有时我什么也不做。
作为响应的一个示例,也许Web服务器将使用TypeScript代码进行响应,也许我想接受该响应,然后将其编译为标准JavaScript。
我研究了this page,但看来只能取消请求并处理标题。 WebRequest API看起来并不符合我的用例需求,因为它只允许对请求和响应进行非常小的操作。
我还考虑过设置一些可以充当代理的Web服务器,但是对此我感到担心。我想维护用户的隐私,并且要确保托管第3方内容的Web服务器看起来好像请求来自类似环境的浏览器(例如Electron Webview),而不是服务器。我知道我可以使用发送的标头来处理请求,但是整个解决方案变得越来越复杂,所以我想,但这可能是唯一的选择。
有什么更好的方法可以实现这一目标,并且可以更好地控制Electron Webview?
答案 0 :(得分:4)
我认为您应该研究Protocol API。它在内部用作代理。
说您想让用户打开http://www.google.com
并看到类似you've been conned!
的内容。
const { protocol } = require("electron");
const content = new Buffer("you've been conned!");
protocol.interceptBufferProtocol("http", (request, result) => {
if (request.url === "http://www.google.com")
return result(content);
... // fetch other http protocol content and return to the electron
});
与WebRequest API相比,
有很多工作要做。但这比独立的本地代理要简单得多。
答案 1 :(得分:2)
要获取您的电子应用程序进行的任何http网络调用的请求正文:
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
if (details.uploadData) {
const buffer = Array.from(details.uploadData)[0].bytes;
console.log('Request body: ', buffer.toString());
}
callback(details);
})