List icon 目录

发布日期 2024年03月29日

JxBrowser 8.0.0 EAP

本页面按逆时间顺序列出了 JxBrowser 8.0.0 EAP(早期访问计划)版本的完整发布历史。

若要将最新的 8.0.0 EAP 构建依赖项添加到您的项目中,请将以下内容添加到您的项目配置中:

plugins {
    id("com.teamdev.jxbrowser") version "1.0.2"
}

jxbrowser {
    // 最新的 JxBrowser EAP 版本。
    version = "8.0.0-eap.4"

    // 将包含 JxBrowser EAP 构建的仓库添加到项目中。
    includePreviewBuilds()
}

dependencies {
    // 添加与 Compose UI 工具包集成的依赖项。
    implementation(jxbrowser.compose)
    // 添加与 SWT UI 工具包集成的依赖项。
    implementation(jxbrowser.swt)
    // 添加与 Swing UI 工具包集成的依赖项。
    implementation(jxbrowser.swing)
    // 添加与 JavaFX UI 工具包集成的依赖项。
    implementation(jxbrowser.javafx)

    // 检测当前平台并添加相应的 Chromium 二进制文件。
    implementation(jxbrowser.currentPlatform)
}
<repositories>
    <!-- 将包含 JxBrowser 预览构建的存储库添加到项目中。-->
    <repository>
        <id>teamdev-preview</id>
        <url>https://europe-maven.pkg.dev/jxbrowser/eaps</url>
    </repository>
</repositories>

<dependencies>
    <!-- 添加对包含 Chromium 二进制文件的构件的依赖项。-->
    <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser-cross-platform</artifactId>
        <version>8.0.0-eap.4</version>
        <type>pom</type>
    </dependency>

    <!-- 添加与 Swing UI 工具包集成的依赖项。-->
    <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser-swing</artifactId>
        <version>8.0.0-eap.4</version>
        <!-- 
           其他可用的选项有:
             - jxbrowser-compose
             - jxbrowser-javafx
             - jxbrowser-swt
        -->
    </dependency>
</dependencies>

欲了解更多关于此主要版本计划的增强功能,请访问 JxBrowser 发展规划

v8.0.0-eap.4

Chrome 扩展程序

JxBrowser 现在提供了 Extensions API(扩展程序 API ),允许您安装、更新、卸载和使用 Chrome 扩展程序。这为将 Chrome 扩展程序集成到您的 Java 桌面应用程序中提供了广泛的可能性。

通过 Extensions API,您可以:

  • 获取已安装的扩展程序列表;
  • Chrome 应用商店手动安装 Chrome 扩展程序;
  • 控制用户可以手动安装哪些扩展程序;
  • 从 CRX 文件编程安装 Chrome 扩展程序;
  • 编程卸载从 Chrome 应用商店或 CRX 文件安装的扩展程序;
  • 控制用户可以手动卸载哪些扩展程序;
  • 在扩展程序安装、更新或卸载时接收通知;
  • 显示扩展程序弹出窗口;
  • 模拟扩展程序图标点击等操作。

JxBrowser Chrome 应用商店

您可以在扩展程序指南中阅读更多关于如何使用 Chrome 扩展程序的信息。

Compose Desktop

我们添加了以下对话框和弹出窗口的默认实现:

  • 打开文件对话框;
  • 保存文件对话框;
  • 选择文件夹对话框;
  • 扩展程序弹出窗口的默认实现;
  • 扩展程序操作弹出窗口的默认实现;
  • 当您在输入字段中键入内容并有自动填充建议时出现的建议弹出窗口的默认实现。

Chromium 126.0.6478.57

我们将 Chromium 升级到了一个新版本,该版本引入了多项安全修复,以防止远程攻击者通过精心制作的 HTML 页面可能利用堆损坏进行攻击,其中包括:

有关 Chromium 126.0.6478.57 版本中修复和改进的完整列表,请访问以下版本的产品博客文章:

v8.0.0-eap.3

Compose Desktop

我们为各种对话框和菜单添加了默认实现,因此您无需:

  • 手动创建拼写检查上下文菜单;
  • 编写 alert、prompt 和 confirm 对话框;
  • 编写 browser 卸载前的对话框;
  • 编写保存和更新信用卡的对话框;
  • 编写选择客户端证书的对话框;
  • 编写保存和更新用户 profile 以及信用卡的对话框;
  • 编写 browser 想要打开外部应用程序时的对话框。

此外,我们还将显示以下 Chromium 对话框:

  • 颜色选择器对话框;
  • 打印预览对话框;
  • 选择屏幕共享源的对话框。

Kotlin 中不再使用 optional

在 Java API 中,我们有很多 Optional 返回值。对于 Kotlin 开发者来说,这是不必要的,所以我们扩展了 API,提供了空安全的方法:

// 之前:
val input: Optional<Element> = element.findElementById("my-input")

// 之后:
val input: Element? = element.findById("my-input")

重大变更

我们将带有属性的操作从 Element 提取到类似映射的 ElementAttributes 中。例如,以下是以前和现在如何为属性赋值的示例:

// 之前:
element.putAttribute("src", "https://example.com/image.png");

// 之后:
element.attributes().put("src", "https://example.com/image.png");

在 Kotlin 中,您可以通过索引操作符访问属性:

element.attributes()["src"] = "https://example.com/image.png"

查看所有重大变更,请访问关于从 JxBrowser 7 迁移到 8 的迁移指南

Chromium 125.0.6422.113

我们已将 Chromium 升级至更新版本,该版本引入了多项安全修复。其中,修复了一项已知漏洞利用的安全修复:

如需查看 125.0.6422.113 版本中 Chromium 的完整修复和改进列表,请访问以下版本的产品博客文章:

v8.0.0-eap.2

Kotlin DSL

Kotlin API 已经扩展了用于组装 Engine 实例的功能,以允许配置 Java EngineOptions.Builder 可用的所有选项。以下代码演示了如何使用 Kotlin DSL 创建具有指定选项的 Engine 实例:

val engine = Engine(RenderingMode.HARDWARE_ACCELERATED) {
    options {
        passwordStore = PasswordStore.BASIC
        proprietaryFeatures = setOf(ProprietaryFeature.H_264)
        switches = listOf("--chromium-switch1", "--chromium-switch2")
    }
}

Kotlin 的 BrowserSettings API 现在为声明式配置提供了变量属性。它允许您以更简洁、更易读的方式配置 Browser 设置。以下代码演示了如何使用 Kotlin DSL 配置 Browser 设置:

browser.settings.apply {
    javascriptEnabled = false
    defaultFontSize = FontSizeInPixels.of(12)
    webRtcIpHandlingPolicy = DISABLE_NON_PROXIED_UDP
}

Compose Desktop

我们改进了与 Compose Desktop UI 工具包的集成。JxBrowser 现在默认支持输入法编辑器(IME)并显示弹出窗口。

JxBrowser Compose Desktop IME

Chromium 123.0.6312.124

我们已将 Chromium 升级至最新版本,该版本引入了多项安全修复,可防止远程攻击者在攻破 GPU 进程后通过特定的 UI 手势潜在地执行沙箱逃逸,以及通过精心制作的 HTML 页面潜在地利用堆损坏漏洞。这些安全修复包括:

如需查看 Chromium 123.0.6312.124 版本中的完整修复和改进列表,请访问以下版本的产品博客文章:

v8.0.0-eap.1

这是 JxBrowser 下一个主要版本的第一个 EAP 构建。在此构建中,我们引入了以下新功能:

Java 17

Java 17 是 JxBrowser 8.0.0 所需的最低 JVM 版本。

Kotlin DSL

现在,得益于 Kotlin DSL,您在使用 JxBrowser API 时可以编写更简洁易读的 Kotlin 代码。

要将 Kotlin DSL 添加到您的项目中,请将以下内容添加到您的项目配置中:

dependencies {
    // 添加用于与 JxBrowser API 协同工作的 Kotlin DSL 依赖项。
    implementation(jxbrowser.kotlin)
}
<!-- 添加与 JxBrowser API 协同工作的 Kotlin DSL 的依赖项。-->
<dependency>
    <groupId>com.teamdev.jxbrowser</groupId>
    <artifactId>jxbrowser-kotlin</artifactId>
    <version>[8.0.0-eap,]</version>
</dependency>

以下是一个示例,展示如何使用 Kotlin DSL 来创建和配置 Engine 实例:

val engine = Engine(RenderingMode.HARDWARE_ACCELERATED) {
    options {
        license = JxBrowserLicense("your_license_key")
        language = Language.GERMAN
        remoteDebuggingPort = 9222
        schemes {
            add(Scheme.JAR, InterceptJarRequestCallback())
        }
    }
}
val browser = engine.newBrowser()

Compose Desktop

我们新增了对另一个 Java UI 工具包的支持 — Compose Desktop。现在,您可以将 JxBrowser 的 BrowserView 嵌入到 Compose Desktop 应用程序中,并使用现代 UI 工具包构建跨平台的现代桌面应用程序。

要将 JxBrowser Compose Desktop 依赖项添加到您的项目中,请将以下内容添加到您的项目配置中:

dependencies {
    // 添加与 Compose UI 工具包集成的依赖项。
    implementation(jxbrowser.compose)
}
<!-- 添加与 Compose UI 工具包集成的依赖项。-->
<dependency>
    <groupId>com.teamdev.jxbrowser</groupId>
    <artifactId>jxbrowser-compose</artifactId>
    <version>[8.0.0-eap,]</version>
</dependency>

下面是一个示例,展示了如何将 JxBrowser 的 @composable BrowserView 组件嵌入到 Compose Desktop 应用程序中:

fun main() = singleWindowApplication {
    val engine = remember { createEngine() }
    val browser = remember { engine.newBrowser() }
    BrowserView(browser)
    DisposableEffect(Unit) {
        browser.navigation.loadUrl("google.com")
        onDispose {
            engine.close()
        }
    }
}

private fun createEngine() = Engine(RenderingMode.HARDWARE_ACCELERATED) {
    options {
        license = JxBrowserLicense("your_license_key")
    }
}
Go Top