List icon 目录

发布日期 2024年10月7日

JxBrowser 8.0.0

我们非常激动地宣布 JxBrowser 8.0.0 正式发布!

这一重要版本引入了诸多新功能和改进,包括 Kotlin DSL、Compose Desktop 支持、Chrome 扩展程序、Windows ARM64 支持、触摸输入、自定义 DOM 事件等。请注意,JxBrowser 现在要求使用 Java 17 或更高版本。

我们没有对 API 进行重大更改,因此您可以轻松地将现有代码迁移到新版本,但我们仍然建议您查阅迁移指南,以了解 JxBrowser 8.0.0 中的更新与改进。

您可以在下文中找到有关 JxBrowser 8.0.0 新功能和改进的更多信息。

Kotlin DSL

得益于 Kotlin DSL,您可以在使用 JxBrowser API 时编写更简洁、可读性更强的 Kotlin 代码。要将 Kotlin DSL 添加到您的项目中,请在项目配置中添加以下依赖项:

Gradle
Maven
dependencies {
    // 向 Kotlin DSL 添加依赖项,以便使用 JxBrowser API。
    implementation(jxbrowser.kotlin)
}
<!-- 向 Kotlin DSL 添加依赖项,以便使用 JxBrowser API。-->
<dependency>
    <groupId>com.teamdev.jxbrowser</groupId>
    <artifactId>jxbrowser-kotlin</artifactId>
    <version>8.0.0</version>
</dependency>

下面是如何使用 Kotlin DSL 创建和配置 Engine 实例的示例:

Kotlin
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 依赖项添加到您的项目中,请将以下依赖项添加到您的项目配置中:

Gradle
dependencies {
    // 添加与 Compose UI 工具包集成的依赖项。
    implementation(jxbrowser.compose)
}

以下是如何将 JxBrowser Compose BrowserView 嵌入到 Compose Desktop 应用程序中的示例:

Kotlin
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.OFF_SCREEN) {
    options {
        license = JxBrowserLicense("your_license_key")
    }
}

示例库

您可以查看以下来自 JxBrowser 示例库的示例,了解如何将 JxBrowser 与 Compose Desktop 集成:

Chrome 扩展程序

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

使用 Extensions API,您可以:

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

JxBrowser Chrome Web Store

您可以在扩展程序指南中了解有关如何使用 Chrome 扩展程序的更多信息。

Windows ARM64

JxBrowser 现在支持 Windows ARM64。您可以在 Windows ARM64 设备上运行 JxBrowser 应用程序,例如 Microsoft Surface Pro X 或任何 Copilot+ PC 设备,并享受 ARM64 设备所带来的更高性能和更长的电池续航。

要在 Windows ARM64 上运行 JxBrowser,您需要在 Gradle 或 Maven 项目配置中添加以下依赖项:

Gradle
Maven
dependencies {
    implementation(jxbrowser.winArm)
}
<dependency>
    <groupId>com.teamdev.jxbrowser</groupId>
    <artifactId>jxbrowser-win64-arm</artifactId>
    <version>8.0.0</version>
</dependency>

触摸输入

现在,您可以在 Windows 和 Linux 上的离屏和硬件加速渲染模式下以编程方式派发和处理触摸事件。当您需要在自动测试中模拟触摸输入或需要在应用程序中处理触摸事件时,它会很有用。

以下代码演示了如何以编程方式派发 touchstart 事件:

Java
Kotlin
browser.dispatch(TouchStarted.newBuilder(
        List.of(TouchPoint.newBuilder(1, Point.of(20, 30), STARTED)
                    .positionInWidget(Point.of(20, 30))
                    .force(0.5F)
                    .radiusX(50)
                    .radiusY(40)
                    .build()))
        .build());
val event = TouchStarted(
    touches = listOf(
        TouchPoint(
            id = 1,
            state = STARTED,
            positionInScreen = Point(20, 30),
            positionInWidget = Point(20, 30),
            force = 0.5F,
            radiusX = 50F,
            radiusY = 40F
        )
    )
)
browser.dispatch(event)

以下代码演示了如何处理 touchstart 事件:

Java
Kotlin
browser.set(StartTouchCallback.class, params -> {
    var event = params.event();
    var touches = event.touches();
    var targetTouches = event.targetTouches();
    var changedTouches = event.changedTouches();
    var keyModifiers = event.keyModifiers();
    return Response.proceed();
});
browser.register(StartTouchCallback { params ->
    val event = params.event()
    val touches = event.touches()
    val targetTouches = event.targetTouches()
    val changedTouches = event.changedTouches()
    val keyModifiers = event.keyModifiers()
    Response.proceed()
})

您可以使用 StartTouchCallback 来抑制 touchstart 事件并阻止其被发送到网页。

DOM 触摸事件

JxBrowser DOM API 允许您订阅 DOM touchstarttouchmovetouchcanceltouchend 事件。以下代码演示了如何订阅 touchstart 事件:

Java
Kotlin
var useCapture = false;
element.addEventListener(EventType.TOUCH_START, event -> {
    if (event instanceof TouchEvent touchEvent) {
        touchEvent.touches().forEach(touch -> {
            var id = touch.id();
            var positionInWidget = touch.positionInWidget();
            var positionInScreen = touch.positionInScreen();
            var radiusX = touch.radiusX();
            var radiusY = touch.radiusY();
            var rotationAngle = touch.rotationAngle();
        });
    }
}, useCapture);
val eventType = EventType.TOUCH_START
val listener = Observer<Event> { event ->
    if (event is TouchEvent) {
        event.touches().forEach { touch ->
            val id = touch.id()
            val positionInWidget = touch.positionInWidget()
            val positionInScreen = touch.positionInScreen()
            val radiusX = touch.radiusX()
            val radiusY = touch.radiusY()
            val rotationAngle = touch.rotationAngle()
        }
    }
}
val useCapture = false
element.addEventListener(eventType, listener, useCapture)

自定义 DOM 事件

现在您可以创建并派发自定义 DOM 事件。以下代码演示了如何创建和派发自定义事件:

Java
Kotlin
var eventType = EventType.of("WebViewReady");
var eventParams = CustomEventParams.newBuilder(document)
        .detail("true")
        .build();
var event = document.createCustomEvent(eventType, eventParams);
val eventType = EventType.of("WebViewReady")
val eventParams = CustomEventParams(
    document = document,
    payload = "true"
)
val event = document.createCustomEvent(eventType, eventParams)

密码、信用卡、用户数据配置文件

现在,您可以通过编程方式将密码、信用卡和用户数据配置文件添加到相应的存储中。在以前的版本中,只有当 Browser 提示用户保存数据时,才能通过用户与 Browser 的交互将这些数据添加到存储中。

以下代码演示了如何通过编程方式将密码添加到密码存储中:

Java
Kotlin
var url = "https://company.com";
var login = "login";
var password = "password";
var passwords = profile.passwordStore();
passwords.add(PasswordRecord.newBuilder(url, password).login(login).build());
val passwords = profile.passwordStore()
passwords.add(
    PasswordRecord(
        url = "https://company.com",
        login = "login",
        password = "password"
    )
)

JxBrowser 7 更新说明

在 JxBrowser 8.0.0 发布后的 12 个月内,我们将继续在 JxBrowser 7 中升级 Chromium。但请注意,对新 Java 版本和操作系统的支持、新功能、改进以及错误修复将仅在 JxBrowser 8 中提供。我们建议您升级到 JxBrowser 8,以便享受这些新功能和改进。

如何升级

如果您拥有有效的 JxBrowser 许可证以及有效的支持和更新订阅,则可以免费升级到 JxBrowser 8.0.0。

您可以通过在您的 GradleMaven 项目配置中更改 JxBrowser 依赖项的版本来升级 JxBrowser。

如果您有任何问题或需要升级方面的帮助,请随时联系我们

下载 JxBrowser 8.0.0

请提供您的电子邮箱地址,我们会尽快将下载说明发送给您。

发送...
请检查您的收件箱。

我们无法发送电子邮件。请使用直接链接下载JxBrowser。

如果您已经是我们的注册客户,您无需任何操作,即可轻松享受此次更新。

如果您希望深入了解并体验我们的产品,您可以申请评估许可证。

获取免费 30 天体验