如何在electron webview中动态连接到代理

如何在electron webview中动态连接到代理,webview,electron,Webview,Electron,我正在使用Electron创建简单的web浏览器。我的用例是我需要通过不同/各自的代理IP路由每个URL。如果用户键入google.com则必须通过123.123.122.1:8081进行路由,如果用户键入gmail.com则必须通过111.111.123:8080[代理/端口].我看到这个http://stackoverflow.com/questions/37393248/how-connect-to-proxy-in-electron-webview?rq=1但它不会动态更改代理。有没有可

我正在使用Electron创建简单的web浏览器。我的用例是我需要通过不同/各自的代理IP路由每个URL。如果用户键入google.com则必须通过
123.123.122.1:8081
进行路由,如果用户键入
gmail.com
则必须通过
111.111.123:8080
[代理/端口].我看到这个
http://stackoverflow.com/questions/37393248/how-connect-to-proxy-in-electron-webview?rq=1
但它不会动态更改代理。有没有可能用电子来解决这个问题。

有两种方法可以解决这个问题。 您可以使用proxy.pac方法或会话/代理规则来更改代理

持续会话方法:

var proxyIp ='12.12.133.12’
var port =‘8080’

<webview id="wv1" src="https://github.com" partition="persist:webviewsession"></webview>

if(proxyIp.trim() =='noproxy'){
    var my_proxy = 'direct://';
    session.fromPartition('persist:webviewsession').setProxy({proxyRules:my_proxy}, function (){
        console.log('using the proxy  '  + proxyIp);
    });

}else{
    var my_proxy = "http://"+proxyIp+":"+port;
    session.fromPartition('persist:webviewsession').setProxy({proxyRules:my_proxy}, function (){
        console.log('using the proxy  '  + proxyIp);
    });
}
proxy.pac

function FindProxyForURL(url, host) {

   if (shExpMatch(url, "*google*"))
         return "PROXY 164.83.99.74:80";

   if (shExpMatch(url, "*amazon*"))
         return "PROXY 194.73.29.74:8080";

   return "DIRECT";

}
Proxy.pac文件可能位于某个S3位置或其他远程服务器或本地,所以即使您更改了将反映在electron工具中的远程Proxy.pac文件。Proxy.pac方法的问题是,当您更改Proxy.pac中的代理IP时,您需要在electron中重新加载Proxy.pac文件,这就是我在上述代码中每3秒重新加载一次的原因

两者都会很好,我自己也测试过。 根据您的用例,您可以使用任何

详细的讨论可以在这里找到

电子文件:

电子维护人员的建议:

你好,杰雅,你终于解决了这个问题吗?@ViceSallés:请检查下面的答案。请输入完整的代码,它对我不起作用。
function FindProxyForURL(url, host) {

   if (shExpMatch(url, "*google*"))
         return "PROXY 164.83.99.74:80";

   if (shExpMatch(url, "*amazon*"))
         return "PROXY 194.73.29.74:8080";

   return "DIRECT";

}