当前位置: 首页 > article >正文

【实用技能】如何将 Web 视图添加到 Compose Multiplatform 应用程序

Compose Multiplatform 是一个用于在桌面、网络和移动设备上创建用户界面的框架。它扩展了 Android 的 Jetpack Compose,并允许您使用熟悉的 API 为 iOS 和桌面开发应用。

JxBrowser 是一个商业 Web 视图组件。它基于 Chromium,也可用于 Swing、JavaFX 和 SWT。

JxBrowser 专为具有关键用例、截止日期和对第三方软件和供应商有高标准的公司而设计。该软件附带由产品工程师直接提供的保密技术支持。保证的首次响应时间 (SLA) 为一个工作日。JxBrowser 使用最新的安全补丁使 Chromium 保持最新状态。

点击下载最新版JxBrowser

WebViews现状

Jetpack Compose 没有 Web 视图组件。相反,开发人员使用 Android 的原生WebView。它是旧版 View 系统的一部分——一种早于 Compose 的 UI 技术。

Compose Multiplatform 也没有 Web 视图组件。相反,开发人员必须依赖平台上可用的组件。或者更准确地说,是多个平台:移动设备上有两个平台,桌面上有三个平台。

在移动设备上一切都很好。Compose Multiplatform 应用可以在 Android 上使用 WebView,WKWebView在 iOS 上使用一个组件。但在传统的台式机上,事情就变得复杂了。

桌面平台也提供原生 Web 视图,但 Compose Multiplatform 中不提供。不过,由于 Compose 可以与 Swing 互操作,理论上还可以与 JavaFX 互操作,因此开发人员可以将 Web 视图组件用于这些经典桌面工具包。这是 2024 年 10 月之前的唯一选择。

2024 年 10 月,JxBrowser发不了8.0.0版本,这是 Compose Multiplatform 的第一个适用于所有桌面平台的 Web 视图组件。这三个平台均适用于 Windows、macOS 和 Linux。JxBrowser 可直接与 Compose 配合使用,并且不使用 Swing 互操作层。

在 Compose 中使用 Web 视图

JxBrowser已经为 JavaFX、Swing 和 SWT 开发了 Web 视图。提供了惯用的 Kotlin API,并且易于添加到现有的桌面应用程序中。以下代码片段展示了如何将 Web 视图添加到 Compose Multiplatform 应用程序:

fun main() {
    // Create and run the Chromium engine.
    val engine = Engine(RenderingMode.OFF_SCREEN)
    val browser = engine.newBrowser()

    singleWindowApplication(
        title = "Compose Desktop BrowserView",
        state = WindowState(width = 800.dp, height = 600.dp),
    ) {
        // Creating a Compose component for rendering web content
        // loaded in the given Browser instance.
        BrowserView(browser)
        DisposableEffect(Unit) {
            browser.navigation.loadUrl("https://html5test.teamdev.com")
            onDispose {
                // Close the engine when the app window leaves the composition.
                engine.close()
            }
        }
    }
}

Compose 实际运行的浏览器视图

在上面的代码中,我们创建了Engine和 的实例Browser。这些类代表实际的 Chromium 实体:Chromium 主进程和其中一个浏览器。 和 均不Engine参与Browser组合,但只要创建它们,您就会拥有一个功能齐全的浏览器。您还可以根据需要创建任意数量的引擎和浏览器。要了解有关位置和方式的更多信息,请考虑阅读我们关于 JxBrowser 架构的指南。

要将实际的 Web 视图添加到组合中,您需要BrowserView 为想要在应用程序中显示的浏览器调用可组合函数。

Kotlin-JavaScript 桥梁

任何 Web 视图的主要功能都是从 Kotlin 调用 JavaScript 并返回。在 JxBrowser 中,您可以获取 JavaScript 对象并直接从 Kotlin 代码访问其属性和方法:

val shoppingCart = frame.executeJavaScript<JsObject>("window.shoppingCart")
val items: JsArray = shoppingCart.call("getItems")

其中包括 DOM 节点:

val body = frame.executeJavaScript<Element>("document.body")
val bodyClone = body.call("cloneNode")

类似地,您可以将任何 Kotlin 对象注入 JavaScript 并从页面调用它:

class KotlinObject {
    @JsAccessible
    fun sayHelloTo(firstName: String) = "Hello $firstName!"
}

// This callback is executed before the page executes its own scripts. 
browser.register(InjectJsCallback { params ->
    val window = params.frame().executeJavaScript<JsObject>("window")
    window?.putProperty("kotlin", KotlinObject())
    InjectJsCallback.Response.proceed()
})

在 Kotlin 和 JavaScript 世界之间的每次调用中,JxBrowser 都会执行自动类型转换。

JxBrowser 的其他功能

JxBrowser 是获取几乎所有可供 Web 开发人员使用(但桌面 Kotlin 中没有)功能的桥梁。

当您需要生成漂亮的 PDF 文件时,Web 视图是一种常见的选择。当您拥有 HTML 和 CSS 格式的 PDF 文件模板时,您可以在 JxBrowser 中加载它并生成 PDF 文件。

与 Android 类似WebView,JxBrowser 允许您截取浏览器的屏幕截图。使用任何 JRE 提供的实用程序,您可以 截取屏幕截图并将其保存为 PNG 图像文件。

在企业环境中,身份验证至关重要。JxBrowser 支持与 Chromium 相同的身份验证协议,并允许您使用 Kerberos、WebAuthn、U2F 和其他身份验证技术。

除此之外,JxBrowser 还提供对网络流量的细粒度控制、高级打印 API、Chrome 扩展程序、专有编解码器支持、代理和许多其他功能。


http://www.kler.cn/a/536058.html

相关文章:

  • mybatis-plus updateById源码
  • OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关
  • 个人笔记---关于详解threadlocal 上下文环境存储的最佳数据类型
  • 【深度学习】基于MXNet的多层感知机的实现
  • sentinel的限流原理
  • 【漫画机器学习】082.岭回归(或脊回归)中的α值(alpha in ridge regression)
  • Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)
  • Web3 跨链技术:构建互联互通的虚拟世界
  • C++Primer 赋值运算符
  • MyBatis框架详解
  • 通过vLLM部署LLM模型到生产环境中
  • 2502全球无线产品认证新闻资讯|英利检测
  • 计算机组成原理——指令系统(五)
  • 十一、CentOS Stream 9 安装 Docker
  • 【图像处理】-不同的图像存储格式
  • 蓝桥杯生命之树(DP)
  • 学习笔记:机器学习中的数学原理(一)
  • 【数据安全】现代智能手机的数据加密机制
  • Linux ftrace 内核跟踪入门
  • 可计算性与计算复杂性:理论计算机科学的核心领域
  • osclass增加支持webp格式
  • 【CPP】C++后端开发面试:深入理解编程中的锁机制
  • Linux进阶——web服务器
  • 【Spring Boot】自动配置源码解析
  • TcpClientTest
  • Python中 logging.basicConfig