Javascript 电子操作/拦截WebView请求和响应

Javascript 电子操作/拦截WebView请求和响应,javascript,webview,electron,Javascript,Webview,Electron,我想创建一个用于显示第三方内容的电子应用程序 我希望能够拦截来自此webview的所有请求和响应。有时我想操纵这个内容,有时我想记录它,有时我什么都不想做 作为响应的一个示例,可能web服务器将使用TypeScript代码进行响应,可能我希望获取该响应,并将其编译为标准JavaScript 我已经研究过了,但是看起来只有取消请求和操纵头是可能的。由于它只允许对请求和响应进行非常小的操作,所以看起来不适合我的用例的需要 我还考虑过设置一段时间的web服务器,作为代理,但我对此表示担忧。我希望维护用

我想创建一个用于显示第三方内容的电子应用程序

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

作为响应的一个示例,可能web服务器将使用TypeScript代码进行响应,可能我希望获取该响应,并将其编译为标准JavaScript

我已经研究过了,但是看起来只有取消请求和操纵头是可能的。由于它只允许对请求和响应进行非常小的操作,所以看起来不适合我的用例的需要

我还考虑过设置一段时间的web服务器,作为代理,但我对此表示担忧。我希望维护用户隐私,并且我希望确保对于承载第三方内容的web服务器来说,请求似乎来自类似浏览器的环境(例如Electron webview),而不是服务器。我知道我可以使用我发送的头等来处理请求,但是整个解决方案变得更加复杂,我希望如此,但可能是唯一的选择


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

我认为您应该研究一下。它在内部充当代理。 说你想让用户打开
http://www.google.com
并查看类似于
您被欺骗的内容

const{protocol}=require(“电子”);
const content=new Buffer(“你被骗了!”);
协议.interceptBufferProtocol(“http”,(请求,结果)=>{
如果(request.url==)http://www.google.com")
返回结果(内容);
…//获取其他http协议内容并返回到服务器

});获取electron应用程序发出的任何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);
      })

我正在制作一种电子浏览器,这种浏览器只能呈现网页/执行使用预共享密钥进行代码签名的代码,这样我就可以从不可信的web服务器(在斯诺登之后的世界中,没有任何web服务器是可信的)提供web应用。所以我需要截取响应体,提取它们的签名,并验证它们。如果签名丢失或无效,我必须先终止WebView,然后它才能呈现/运行页面,或者用警告消息或其他内容替换响应正文。所以我对你的要求很感兴趣。这在chrome/扩展中是不可能的。因为您可以修改响应。因此,您应该考虑为构建代理服务器this@TarunLalwani听起来,对圭拉和我来说,隐私是一个主要问题。因此,代理服务器似乎不是我们正在寻找的安全方法。除非代理服务器是本地服务器或其他什么,否则必须确保维护隐私和安全。如果你有这方面的示例代码,我建议你写一个答案:)我考虑过创建一个本地代理服务器,并使用重定向API使请求通过它,但这会使站点源成为
https://localhost:somePort
而不是原始原点。也许使用常规代理API可以帮助实现这一点,我稍后会看一看。我刚刚发现Firefox有一个API,它甚至可以用于浏览器扩展:。很遗憾铬/电子没有:(这看起来很有希望,但我现在没有时间尝试:。@CharlieFish,如果你有,请让我知道:)不管你对此投了反对票,想解释一下原因吗?看起来很有希望@notXX,这可以用来修补HTTPS响应的内容吗?起初我只是写了“我想你应该看看协议API”,所以被否决了。它不是真正的补丁内容,更像是一个代理。如果拦截HTTPS协议,则必须处理所有HTTPS请求,因此需要大量工作。也许我们可以注册一个自定义协议,并使用webRequest.onBeforeRequest将所选请求重定向到自定义协议。interecpt整个协议很混乱。这正是我想要的tbh,但可能不是Charlie想要的。问题是:当您编写结果时,是否必须对其进行SSL加密?我想是的。但在这种情况下,我可以使用自签名证书,然后告诉Electron忽略证书错误。由于代理代码本身将使用验证证书的HTTPS库,因此不应存在安全问题,并且文档来源(协议、主机名和端口)将保持完整。。。这看起来真的很有希望,谢谢:)我也很好奇如何只截获具有特定路径的特定请求。我在这里提出了新的问题:和