javascript - Electron 操纵/拦截 WebView 请求和响应

标签 javascript webview electron

我想创建一个将使用 webview 的 Electron 应用程序显示第 3 方内容。

我希望能够拦截来自该 webview 的所有请求和响应。有时我想操纵这些内容,有时我想记录它,有时我什么都不做。

作为响应的一个示例,也许 Web 服务器将使用 TypeScript 代码进行响应,也许我想获取该响应并将其编译为标准 JavaScript。

我调查了this page但看起来只能取消请求并操纵 header 。 WebRequest API看起来不符合我的用例的需要,因为它只允许对请求和响应进行非常小的操作。

我也考虑过设置一些可以充当代理的网络服务器,但我对此有顾虑。我想维护用户隐私,并且我想确保托管第三方内容的 Web 服务器看起来请求来自类似浏览器的环境(例如 Electron webview)而不是服务器。我知道我可以使用我发送的 header 等来处理请求,但是整个解决方案变得更加复杂,然后我想,但可能是唯一的选择。

有没有更好的方法来实现这一点,并更好地控制 Electron webview?

最佳答案

我认为你应该查看 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 相比,还有很多工作要做,但它比独立的本地代理简单得多。

关于javascript - Electron 操纵/拦截 WebView 请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974767/

相关文章:

electron - 如何打包具有 OCR 功能的 Electron 应用程序?

javascript - 使用参数 ReactJS 从 API 请求中获取信息

javascript - 将 jquery 插件功能附加到动态创建的 DOM 元素

javascript - 在干净的列中输出动态文本

ios - 设备中的 WKWebView 加载请求不起作用,但模拟器正在运行

node.js - 本Node实例使用的V8平台不支持创建Worker

javascript - 使用 map 循环时删除关联对象

webview - 在 Swift 的 webview 上启用 web inspector

javascript - Dom 迭代导致 webview 渲染一半

electron - 如何仅在Mac版本的Electron应用程序中使用某些代码行?