JxBrowser 是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5、CSS3、JavaScript、Flash等。
近日, JxBrowser v7.17发布啦! 在此版本中,此版本支持 Chromium 配置文件、JavaScript Promise API、网络连接状态更改时的通知以及许多改进和修复,欢迎下载体验。
新增功能
Chromium 91
Chromium已经更新到91.0.4472.114版本。这个Chromium版本包括几个重要的安全修复,一些Chromium的功能已经被删除或改变。
配置文件
在这个版本中,我们扩展了API的功能,允许管理Chromium配置文件。现在,该架构有如下结构。
每个引擎都有一个默认的配置文件,你可以通过以下方式访问:
Profile defaultProfile = engine.profiles().defaultProfile();
要创建一个新的普通或隐身档案,请使用以下API:
Profiles profiles = engine.profiles();
Profile myProfile = profiles.newProfile("MyProfile");
Profile myIncognitoProfile = profiles.newIncognitoProfile("MyIncognitoProfile");
每个浏览器实例都有一个配置文件。要为特定的配置文件创建一个浏览器实例,请使用以下方法:
Browser browser = profiles.defaultProfile().newBrowser();
...
Profile myProfile = profiles.newProfile("MyProfile");
Browser browser = myProfile.newBrowser();
为了向后兼容,我们没有改变引擎的接口。它只是将其调用委托给了默认的配置文件。比如说:
Browser browser = engine.newBrowser();
// is equivalent of
Browser browser = engine.profiles().defaultProfile().newBrowser();
CookieStore cookieStore = engine.cookieStore();
// is equivalent of
CookieStore cookieStore = engine.profiles().defaultProfile().cookieStore();
如果你用用户数据目录配置了Engine,那么所有创建的profile将在应用程序重启之后被恢复,除非你通过Profiles.delete(Profile)删除一个profile。
JS Promises
新版本从JavaScript到Java类型的自动类型转换,反之亦然,已经扩展了对JavaScript Promise的支持。现在,可以通过全新的JsPromise类型与JavaScript Promises一起工作。
JsPromise promise = frame.executeJavaScript(
"new Promise(function(resolve, reject) {n"
+ " setTimeout(function() {n"
+ " resolve('Hello Java!');n"
+ " }, 2000);"
+ "})");
promise.then(results -> {
System.out.println(results[0]);
return promise;
}).then(results -> {
System.out.println(results[0]);
return promise;
}).catchError(errors -> {
System.out.println(errors[0]);
return promise;
});
网络连接状态
Chromium在内部跟踪互联网的连接状态。当互联网连接中断后又恢复时,Chromium会检测到这一点并以编程方式重新加载当前加载的网页。在这个版本中,我们用这个功能扩展了API。现在,当网络连接状态发生变化时,你可以得到通知。比如说:
network.on(NetworkChanged.class, e -> {
// If the connection type is TYPE_NONE, there is no connection.
if (e.connectionType() == ConnectionType.TYPE_NONE) {
// The network connection has been dropped. We are offline.
} else {
// The network connection has been restored.
}
});
增强功能
- NavigationFinished事件已被扩展为isFragmentNavigation(),它表明是否已对同一文档中的一个片段进行了导航。
Bug修复
- 当JavaFX BrowserView被嵌入到TabPane中时,原生Chromium窗口被分离,在硬件加速渲染模式下,Linux上最小化后,舞台被恢复。
- 在使用设置的桌面亲和力API后关闭浏览器时,Chromium崩溃。
- 在硬件加速渲染模式下,Linux上显示Java窗口时,浏览器会窃取输入焦点。
- 试图在 Frame.viewSource() 打开的弹出式浏览器中执行 UI 相关的方法,在 Windows 上会导致本地崩溃。
- 在macOS上用Swing BrowserView显示的网页内的D&D丢失的下降数据。
- 在离屏渲染模式下支持Swing D&D功能中的自定义文本表示。