use*_*446 7 java proxy javafx webview
如何为每个WebView实例设置代理?
这是我到目前为止:
public void start(Stage stage) {
StackPane root = new StackPane();
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.load("https://www.google.com");
root.getChildren().add(view);
Scene scene = new Scene(root, 960, 640);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) throws IOException {
Application.launch(args);
}
Run Code Online (Sandbox Code Playgroud)
这启动了谷歌页面的窗口就好了.
但是,我如何设置代理?不是VM系统代理,而是每个WebView窗口的代理.
小智 5
从部署概述来看:
3.2.3 内置代理支持
正确打包的 JavaFX 应用程序具有根据 Java 运行时配置设置初始化的代理设置。默认情况下,这意味着如果应用程序嵌入网页,则将从当前浏览器获取代理设置,否则将使用系统代理设置。默认情况下,代理设置在所有执行模式下都会初始化。
可能无法针对每个 WebView 实例进行设置。我想到了一种技巧,但我真的不想这样做 - 扩展 WebView,以便每当用户(以及 WebView 中的脚本等)与它交互时,它都会调用System.setProperty("http.proxy",this.myProxy)
. 就像是:
class KludgeWebView extends WebView {
String myProxy;
String myProxyPort;
String sysProxy;
String sysProxyPort;
KludgeWebView()
{
super();
sysProxy = System.getProperty("http.proxy");
sysProxyPort = System.getProperty("http.proxyPort");
}
public void load(String url)
{
useProxy();
super.load(url);
revertProxy();
}
public void useProxy()
{
System.setProperty("http.proxy",myProxy);
System.setProperty("http.proxyPort", myProxyPort);
}
public void revertProxy()
{
System.setProperty("http.proxy",sysProxy);
System.setProperty("http.proxyPort", sysProxyPort);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎很混乱。它可能会错过诸如用户单击 WebView 内的链接或执行 XmlHttpRequest 等操作的脚本之类的事情。我不会推荐这个,除非你别无选择。
归档时间: |
|
查看次数: |
8075 次 |
最近记录: |