我想创建一个将使用 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/