百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

浏览器集成控件JxBrowser新版引入Chromium84

toyiye 2024-05-09 18:41 31 浏览 0 评论

JxBrowser是将基于Chromium的浏览器与Java应用程序集成,以处理和显示HTML5、CSS3、JavaScript、Flash等。

近日,JxBrowser v7.12发布啦!JAVA应用程序浏览器集成控件JxBrowser更新至7.12, 现在可以在Chromium 84上运行,并且在使用DOM和JavaScript-Java Bridge API时提供了许多新选项,点击文末“了解更多”下载最新版JxBrowser。

新增功能

Chromium 84

在这个Chromium构建中,一些与JxBrowser封装的功能已经被移除或改变,所以这个JxBrowser版本在公共API中引入了一些突破性的变化。

可信事件

com.teamdev.jxbrowser.dom.event.Event接口已经扩展了isTrusted()方法,允许检测事件是由用户操作产生的,还是通过EventTarget.dispatchEvent()创建/修改并发送的。

MouseEvent:页面位置

com.teamdev.jxbrowser.dom.event.MouseEvent接口已经扩展了pageLocation(),允许获取事件发生时鼠标光标在文档坐标系中的位置。

MouseEvent:页面位置

允许从com.teamdev.jxbrowser.dom.event.KeyEvent中获取键码的功能已经被重新设计为与DOM KeyboardEvent类似。我们为DOM键码引入了DomKeyCode枚举,并扩展了com.teamdev.jxbrowser.dom.event.KeyEvent的方法,允许获取DOM键码和一个代表与物理键相关联的UTF-8字符的字符串,如果它有打印表示的话。例如

document.addEventListener(EventType.KEY_PRESS, event -> {
    if (event instanceof KeyEvent) {
        KeyEvent keyEvent = (KeyEvent) event;
        DomKeyCode keyCode = keyEvent.domKeyCode();
        String character = keyEvent.character();
        System.out.println("DOM KeyEvent: keyCode=" + keyCode  + ", character=" + character);
    }
}, false);

JS可访问的Java类

JavaScript-Java Bridge API已经扩展了com.teamdev.jxbrowser.js.JsAccessibleClasses,它允许告诉人们特定类型的Java实例可以从JavaScript中访问。例如

JsAccessibleClasses.add(ArrayList.class, LinkedList.class);

Cookie SameSite

增加了SameSite cookie属性支持。

改进功能

  • 通过了在离屏渲染模式下检查 "MovementX和MovementY在鼠标事件中的变化 "的JS测试。
  • Frame.isMain()方法不再向Chromium引擎发送请求,以找出这个框架是否是浏览器中的主(顶层)框架。现在,这个信息会在创建一个Frame时提供,并缓存起来供进一步调用。
  • 现在不允许运行JxBrowser Chromium二进制文件中附带的Chromium可执行文件。JxBrowser所使用的Chromium二进制文件应该只供JxBrowser使用,用户不应该能够直接运行它并将其作为普通的Web浏览器应用程序使用。
  • 允许将JavaFX BrowserView嵌入到继承JFXPanel的容器中。例如
    JFXPanel fxPanel = new MyJFXPanel(); BrowserView view = BrowserView.newInstance(browser); fxPanel.setScene(new Scene(new BorderPane(view), 600, 600)); private static final class MyJFXPanel extends JFXPanel {}
  • TextFinder Javadoc已经扩展了更多的细节,包括文本搜索的工作方式,如何突出显示匹配,如何检测第一个匹配等等。
  • 默认情况下,Chromium会在二进制文件所在的目录下创建debug.log文件。在某些环境下,对这个目录的访问可能是被禁止的,操作系统可能会报告这种尝试。从这个版本开始,Chromium将不再创建debug.log文件,相应的日志信息将被重定向到JxBrowser日志中。
  • 现在,库中使用的Chromium构建是使用is_official_build=true标志构建的。官方Chromium构建会禁用Google Chrome官方构建中禁用的实验性学习配置。其中有一个实验性的功能在以前的JxBrowser版本中被启用了,就是页面冻结,可能会冻结网页并停止JavaScript的执行。因此,该库使用的Chromium引擎在内部功能的启用/禁用方面变得更接近官方Chromium构建。
  • 触发Windows审计失败的功能被禁用。这个问题是由于Chromium从Windows API中调用LogonUser()函数,并向其传递了一个空的密码。我们通过禁用试图使用空密码登录的功能来解决这个问题。这个变化不影响任何其他Chromium功能。

Bug修复

  • Chromium渲染进程崩溃时不显示 "Aw, snap"页面。
  • 在Windows上的离屏渲染模式下,JavaFX在7.9中引入的破损渲染。
  • 在Linux下,在硬件加速渲染模式下,隐藏和显示嵌入BrowserView的JFrame后不显示网页内容。
  • 离屏渲染模式下忽略了HTML5拖拽事件中的空数据味道,导致部分HTML5 DnD事件根本无法工作。
  • 离屏渲染模式下从文件系统拖动文件到Swing BrowserView实例时出现NullPointerException错误。
  • 在离屏渲染模式下,在显示主舞台后,用嵌入式BrowserView实例显示JavaFX场景时,出现NullPointerException错误。
  • CookieStore没有保存带有未指定SameSite属性的Cookie。
  • 当在PDF浏览器中右击时,ShowContextMenuCallback没有被调用。
  • 在使用NVidia GeForce 1650和430.64驱动版本的Linux上,离屏渲染不工作。
  • JavaScript-Java Bridge功能不能调用标有@JsAccessible注解的Java方法,如果有其他方法与之同名。
  • 当引擎实例在Incognito模式下运行时,拼写检查器字典没有被配置。
  • 在macOS上SWT的硬件加速渲染模式下,打印预览对话框的渲染中断。
  • 在macOS上SWT的离屏渲染模式下,打印预览对话框不显示。
  • 在Windows和Linux上的硬件加速渲染模式下,在网页上右击Flash时,默认的Swing BrowserView上下文菜单不可见。
  • 在macOS上,浏览器无法调整到小于300px的大小。
  • EventType.DOUBLE_CLICK的DOM事件监听器从未被调用。
  • 在离屏渲染模式下,EnterMouseCallback和ExitMouseCallback没有被调用。在Windows和Linux的硬件加速渲染模式下,EnterMouseCallback无法被调用,因为它被Chromium引擎忽略了。
  • 在离屏渲染模式下,SWT BrowserView组件在Eclipse的Part on tab开关中不可见。
  • 在SWT中打印当前加载的网页为PDF时,默认保存文件名错误。
  • 在禁用Chromium流量的情况下,在已加载网页的输入栏中输入一些文本时,拼写检查器初始化失败。
  • 在Windows的离屏渲染模式下,自定义CSS光标模糊。
  • 在Windows的硬件加速渲染模式下,在SplitPane中添加/删除JavaFX BrowserView时出现黑色闪烁。
  • 在Windows的离屏渲染模式下,当显示/隐藏BrowserView时,随机出现黑色矩形闪烁。
  • 注入到JavaScript中的Java对象中标有@JsAccessible注解的方法在关闭Browser时被多调用一次。
  • 通过window.close()JavaScript函数关闭Swing BrowserView弹出式实例时出现的IndexOutOfBoundsException错误。
  • 当加载一个SSL证书无效的HTTPS网页时,ShowNetErrorPageCallback回调没有被调用。
  • 在离屏渲染模式下,不能将焦点设置为位于不同域的IFRAME内的HTML输入字段。
  • 恢复了对Firebase云消息的支持。
  • v7.8之后重新引入了macOS和Windows上的Widevine功能。
  • 在离屏渲染模式下,不同的鼠标移动事件的MouseEvent.moveX和MouseEvent.moveY属性应该是不同的。
  • macOS上mach_port功能相关的JNI中出现多个错误导致JVM崩溃。

如果您对jxbrowser感兴趣,可以点击下方“了解更多”了解具体授权和使用机制。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码