如何在 electron webview 中连接到代理?

How connect to proxy in electron webview?

因为我可以通过 a 连接到免费代理服务器(或付费),目前用作桌面应用程序的电子 JS 解决方案

示例代理列表服务器

http://proxylist.hidemyass.com/

您可以使用会话对象的.setProxy()方法。您可以像下面的示例一样直接指定代理:

// in main.js
var electron      = require('electron');
var BrowserWindow = electron.BrowserWindow;
mainWindow = new BrowserWindow({
    "width": 970,
    "height": 500,
    "center": true,
    'title': 'Main window',
});
mainWindow.webContents.session.setProxy({proxyRules:"socks5://114.215.193.156:1080"}, function () {
    mainWindow.loadURL('https://whatismyipaddress.com/');
});

或者您可以使用 PACscript:

// in main.js
mainWindow.webContents.session.setProxy({pacScript:"file://"+root+"/js/pacfile.js"}, function () {
    mainWindow.loadURL('https://whatismyipaddress.com/');
});


// pacfile.js example
var blocked      = ["site1.com", "site2.com", "site3.com"];
var proxyServer  = "SOCKS5 114.215.193.156:1080";
function FindProxyForURL(url, host) {
    var shost = host.split(".").reverse();
    shost = shost[1] + "." + shost[0];
    for(var i = 0; i < blocked.length; i++) {
        if( shost == blocked[i] ) return proxyServer;
    }
    return "DIRECT";
}

我在 运行 单独的浏览器视图中使用建议的方法时遇到问题。

我没有在 BrowserWindow 上设置代理,而是在视图上设置了代理:

view.webContents.session
      .setProxy({
        proxyRules: proxyString,
      })

然后使用 app.on('login') 处理程序授权代理。

所选答案在某种程度上是正确的,但库中的最后更改将使您这样做:

setProxy 现在是 Promise。所以现在你需要把最后一个函数放到 .then() 函数中。我希望这个评论能帮助其他人。我这样修好了我的:

mainWindow.webContents.session
.setProxy({proxyRules:"socks5://114.215.193.156:1080"})
.then(() => {
    mainWindow.loadURL('https://whatismyipaddress.com/');
}).catch((err) => console.error(err));