2016-10-14 2 views
2

私は電子を使用して簡単なWebブラウザを作成しています。私のユースケースは、それぞれのURLを異なる/それぞれのプロキシIP経由でルーティングする必要があるということです。ユーザーがgoogle.comと入力した場合は、123.123.122.1:8081を経由しなければならず、gmail.comと入力すると、111.111.111.123:8080 [Proxy/Port] .Iこれを見ましたが、プロキシは動的に変更されません。それを電子で行うことは可能ですか?どのように電子webview - 動的にプロキシに接続

+0

こんにちはJeyaを、あなたは最終的にこれを解決したのですか? –

+0

@ViceSallés:下記の答えを確認してください –

答えて

1

この問題を解決するには2通りの方法があります。

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方法

proxy.js

const {app, BrowserWindow} = require('electron'); 
const {session} = require('electron') 
let mainWindow; 
app.on('window-all-closed', function() { 
    app.quit(); 
}); 

    app.on('ready', function() { 
    mainWindow = new BrowserWindow({width: 1024, height: 768 }); 
    session.defaultSession.allowNTLMCredentialsForDomains('*')//to access internal sites 

var myVar = setInterval(myTimer, 3000); 
function myTimer() { 
    mainWindow.webContents.session.setProxy({pacScript:'file://' + __dirname + '/proxy.pac'}, function() {return true;}); 
} 

mainWindow.webContents.session.setProxy({pacScript:'file://' + __dirname + '/proxy.pac'}, function() {mainWindow.loadURL('file://' + __dirname + '/browser.html');}); 
    mainWindow.openDevTools(); 
}); 
: いずれかのプロキシに

がセッション方式存続を変更する方法やセッション/プロキシルールをはproxy.pac使用することができます

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メソッドの問題は、proxy.pacでプロキシIPを変更するときです。proxy.pacファイルをリロードする必要があります。そのため、3秒ごとにリロードしています。

両方とも正常に動作し、両方とも自分自身でテストしました。 ユースケースに基づいて任意のものを使用できます。

詳細な議論はここ https://discuss.atom.io/t/how-to-set-proxy-for-each-webview-tag-in-electronjs/37307/2

電子文書見つけることができます:電子メンテナからhttps://github.com/electron/electron/blob/master/docs/api/session.md#sessetproxyconfig-callback

提案: https://github.com/electron/electron/issues/8247#issuecomment-268435712

関連する問題