xBrowser是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5,CSS3,JavaScript,Flash等。
JxBrowser更新至7.3,支持最新macOS Catalina,支持Java13,支持浏览器发起的URL请求,修复多项Bug,具体更新情况如下:
点击最下方“了解更多”即可下载最新版JxBrowser
新增功能
- MacOS Catalina(10.15):苹果本月宣布了macOS Catalina(10.15)的公开发布。JxBowser 7.3已在此操作系统上经过测试,现在正式支持它。
- Java 13:从7.3版开始,JxBrowser在Windows,Linux和macOS平台上正式支持JDK 13。
- 浏览器发起的URL请求:在BeforeSendHeadersCallback和ReceiveHeadersCallback回调中,您可以访问Browser实例,该实例启动了相应的URL请求。
network.set(BeforeSendHeadersCallback.class, params -> {
// Access the Browser instance initiated this URL request.
params.browser().ifPresent(browser -> {});
return BeforeSendHeadersCallback.Response.proceed();});network.set(ReceiveHeadersCallback.class, params -> {
// Access the Browser instance initiated this URL request.
params.browser().ifPresent(browser -> {});
return ReceiveHeadersCallback.Response.proceed();});复制代码
- BrowserView中禁用Swing和JavaFX 组件:现在,可以BrowserView使用BrowserView.setEnabled(boolean)方法在两种渲染模式下禁用/启用Swing和JavaFX 组件。禁用BrowserView的用户照常渲染Web内容,但忽略用户输入。
改进
- 该库检查所有在Linux平台上所需要的依赖,并抛出如果缺少某些从属项,并且必须安装一个例外。检查机制考虑了LD_LIBRARY_PATH环境变量。
- BrowserView现在,在硬件加速渲染模式下,无需使用布局管理器,即可将Swing 正确放置在容器内。
Bug修复
- 修复BrowserView从macOS从HiDPI切换到非HiDPI显示器时缩放错误。
- 修复BrowserView在屏幕外渲染模式下删除和添加相同的Swing 组件时,绘画不完整。
- 修复Engine在停止JavaFX应用程序期间关闭实例后,无限等待问题。
- 修复在ReceiveHeadersCallback回调中使用相同的HTTP标头覆盖URL请求会导致某些网站停止加载时出现问题。
- 修复ava.lang.IllegalArgumentException:在注册实现两个或更多回调接口的回调时,无法确定操作类错误。
- 修复BrowserView当在比例系数> 100%的监视器上显示并且使用--force-device-scale-factor=1.0Chromium开关时,Swing 边界不正确的问题。
- 修复将Swing BrowserView组件嵌入到JTabbedPane容器中时,Web内容显示在主屏幕的左上角。
- 修复Cookie将cookie放入cookie存储区时,到期时间将被忽略并且无效的问题。
- 修复key在屏幕外渲染模式下触发keydown JavaScript事件时,此属性为空的问题。
- 修复在屏幕外渲染模式下,在Bing地图,HTML滑块和WebGL内容上进行的拖放操作无法正常工作。
- 修复java.lang.NullPointerException构造JsError实例期间的错误。
- 修复在非屏幕渲染模式下在Linux上调整WebGL内容大小时闪烁的问题。
- 修复BrowserView在Swing和JavaFX中同时显示时,在屏幕外渲染模式下加载具有不同域的网页时,内存泄漏的问题。
- 修复在Windows上禁用Chromium Sandbox时,杀死Java进程时,待处理的Chromium呈现进程。
- 修复在macOS上的硬件加速渲染模式下使用BrowserView两个或更多BrowserView实例时,显示错误JTabbedPane。
- 修复PointInspection位于中的HTML元素的结构中的框架错误IFRAME。
- 修复CookieStore 无法删除由网络服务器设置的cookie。
- 修复在Windows和Java 10及更高版本上显示JavaFX Stage并TabPane包含BrowserView在硬件加速渲染模式下时,本机崩溃的问题。
- 修复在屏幕外渲染模式下,右键单击上下文菜单不适用于Windows上的某些网页的问题。
随着当今计算机网络技术的发展,Web技术由于其良好的跨平台特性,其对于更新迭代较慢的工控行业的影响也越来越大。包括西门子在内的工业自动化巨头都将Web技术融入到自身最新控制系统中: WinCC Unified PCS7 neo等。但是在传统的SCADA系统中,往往对于最新的Web技术的兼容性不够理想。例如西门子公司的Wincc软件,由于强大的功能和可扩展性,在工控行业应用广泛,笔者在最近的项目中就遇到一个问题,因为某品牌称重模块的参数设置和校准是通Web页面来实现的,但是在用Wincc的WebBrowser Control控件时经常会遇到一个问题,那就是新打开网页的时候经常会报浏览器脚本执行错误,客户不接受系统有报错显示,所以必须想办法给予解决。通过查询相关资料得知,Wincc的WebBrowser Control控件因为采用的旧的IE内核的原因,对于JS脚本兼容性不够好。
那么有什么办法可以解决这个问题吗?既然旧的IE内核与JS兼容性不好,那么有没有办法可以给它换个完美兼容JS的内核呢。西门子自带的控件肯定是不能用了,那么只能自己制作一个支持.NET控件来实现了。
新建Visual Studio项目
新建一个Windows窗体控件库项目,如下图所示。
安装CefSharp包
因为Visual Studio自带的WebBrowser控件也是基于IE内核,所以为了一劳永逸,我们需要安装一个支持Chrome内核的第三方包。右键点击项目,选择“管理NuGet程序包”,搜索CefSharp.WinForms,并下载最新版本,如下图所示。
添加ChromiumWebBrowser控件
扩展包正确安装完成之后,在工具箱会多出两个控件,将下图中标红的控件添加到窗体控件中,并添加一个TextBox控件用于IP地址的显示,如下图所示。
将URL作为参数传入用户窗体控件
笔者的项目,称重模块是在浏览器中通过输入IP地址进行模块校准,当用户自行实施校准操作时,因为模块比较多,加之IP地址又不好记。显然,要用户直接输入IP地址操作是不够友好的。所以需要在Wincc中根据不同的称重模块动态化的写入IP地址,用户只需要根据传感器所在工艺流程图的位置选择对应的模块即可。IP地址将其作为参数传入我们制作的.NET控件。为此我们需要为用户窗体控件新增一个属性,通过这个属性来传递URL。在用户窗体画面双击空白处,进入控件类的定义,新增一个名称“IPAddress”,返回值类型为String的属性,代码如下图所示。
加载URL
URL参数传入之后,我们需要浏览器控件加载我们的URL,这里需要用到ChromiumWebBrowser控件的Load()方法加载我们的URL。代码如下图所示。
生成DLL文件
至此我们已经完成控件的代码编写工作了,我们只需要输出DLL文件就完成控件制作工作了,点击生成解决方案就可以在输出文件夹中输出我们需要的DLL了,如下图所示。
在Wincc中调用.NET控件
接着我们需要在Wincc中调用我们制作的控件,打开Wincc画面编辑器,在控件栏选择.NET控件,右键单击添加。选择名称为Visual Studio中项目名称的DLL。然后添加进Wincc系统中。
动态化URL
控件添加成功后,拖放至画面中,通过控件属性,我们可以看到控件属性中新增了一条名称为“IPAddress”的属性,这个属性用来传递URL参数,在这里我们可以输入固定的值,也可以通过动态绑定Wincc的变量。
我们激活运行之后打开网页就不会出现脚本错误的问题了,同时也可以在项目中通过脚本自动关连到不同称重模块的参数与校准界面,省掉用户手动输入IP地址的繁琐,演示效果如下图所示。
备注:本文中所用的开发软件为:Visual Studio Community 2022 (64 位) Wincc7.4SP1+Upd16。
xBrowser是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5、CSS3、JavaScript、Flash等。
主要功能
- 用来将HTML浏览程序内置到AWT/Swing用户界面上的可视浏览器控件
- 使用Gecko 1.9/Firefox 3代码库
- 标准化的导航方法,如直接导航()、后退()、前进()以及停止()
- 能执行JavaScript代码。支持字符串返回值。
- 不同浏览器事件的标准Java监听对象
- 通过W3C DOM API访问浏览器的DOM(org. w3c. dom.*包)
- 控制台服务使你能收到关于脚本失败与其它页面问题的通知
- 能创建上下文独立的Java菜单代替标准的浏览器菜单
- 能下载文件
- 拥有为不同内容类型提供用户定义行为的API
- 追踪不同步操作的API
- 浏览器代理设置的配置
近日,JxBrowser v7.14发布啦! 在此版本中,Chromium引擎已升级到版本89,同时Chromium不再支持Flash,所有与Flash相关的功能均已从其源代码中删除,欢迎下载体验。
点击下载最新版JxBrowser
新增功能
Chromium 89
Chromium已更新至版本89.0.4389.90。此Chromium版本包含几个重要的安全修复程序,因此建议您将JxBrowser升级到v7.14。
Flash EOL
Chromium不再支持Flash。所有与Flash相关的功能均已从其源代码中删除。在此版本中,也删除了以下与Flash相关的API:
- EngineOptions.ppapiFlashPath()
- EngineOptions.ppapiFlashVersion()
- EngineOptions.Builder.ppapiFlashPath(Path ppapiFlashPath)
- EngineOptions.Builder.ppapiFlashVersion(String ppapiFlashVersion)
改进措施
- BrowserView现在,在两种渲染模式下都必须在Linux上强制使用矩形。在以前的版本中BrowserView有圆角。
- 在实例化一个Engine实例时,Chromium的进程数量减少了。在之前的版本中,Chromium启动了7个进程。主进程,GPU,2x实用程序,3x渲染器。现在只启动了4个进程:Main、GPU、Utility、Renderer。
- 现在可以在DevTools中创建HAR文件。
- 对本地网络IP的Chromium流量已被禁止。我们发现,即使在Chromium流量被关闭的情况下,Chromium仍然会向URLs(如URLs http://10.0.0.17:8060或http://192.168.1.188)发送请求。
- 当关闭BrowserView时,总是将焦点返回到JavaFX。
Bug修复
- 在屏幕外渲染模式下,Linux上的GPU崩溃。
- 显示HTML工具提示时,在硬件加速渲染模式下,Windows和Linux上的GPU崩溃。
- 当BeforeSendUploadDataCallback.Params.uploadData()有非UTF-8文本时,出现InvalidProtocolBufferException错误。现在,如果上传数据有非UTF-8文本,数据将被视为com.teamdev.jxbrowser.net.BytesData。
- 在Windows上隐藏和显示BrowserView在副显示屏上的缩放因子与主显示屏不同后的错误缩放。
- 在Windows的硬件加速渲染模式下,从JavaFX SplitPane中添加/移除BrowserView时闪烁。
- 当调整大小时,弹出窗口减小其大小。
- 当导航到某个HTTPS URL时,由于SSL握手失败,导致网页无法加载。
- 离屏渲染模式下的jQuery文件拖放失败。
- 在macOS上,FocusGained事件未被触发。
- 在Linux上,Chromium二进制文件验证失败并出现权限错误。
- 在Windows上,默认的拼写检查器上下文菜单在其外点击时未被关闭。
- JavaScript剪贴板API的读/写权限未被授予。
- Chromium Win32二进制文件验证失败。
- 在拼写检查器初始化过程中,输入文本的网页崩溃。