List icon 目录

架构

这是 JxBrowser 架构的概述。

概述

JxBrowser 库的架构由多个进程组成,如 Java 应用程序进程和不同的 Chromium 进程:

jxbrowser-architecture-diagramJava ProcessJavaAppChromium GPUJxBrowserBrowserViewSwingSWTJavaFXEngineProfileBrowserFrameChromium MainEngineProfileBrowserChromium RendererFrameDOMJSFrameDOMJSDOMJSFrameDOMJSIPCChromium IPCChromiumIPCChromium IPCIPCIPC

以下部分将详细介绍每个进程、库的主要组件,并描述它们的工作原理。

进程

Java

这是运行 Java 应用程序的标准 Java 进程。在这里,您可以使用 JxBrowser API 来初始化 Engine,访问默认 Profile,创建 Browser 实例,加载网页,访问 Frame 的 DOM,执行 JavaScript,将 BrowserView 嵌入到 Java Swing、JavaFX 或 SWT 桌面应用程序中,以显示加载的网页内容等等。

Chromium

Chromium 使用 Multi-Process Architecture 并运行多个进程。每个进程都有自己的类型和目的。您可以在下面找到基本进程类型的说明。

Chromium 决定应该启动多少进程。它可能会为其内部功能、插件、扩展、实用程序等运行额外的进程。

Main

这个进程是在你创建 Engine 的时候由 JxBrowser 启动的。它是管理其他 Chromium 进程生命周期的主进程。如果您终止此进程,则此进程产生的所有其他 Chromium 进程也将终止。

对于每个 Engine 实例,都会启动一个单独的 Chromium Main 进程。

Renderer

在此进程中,管理加载网页的 DOM 和 JavaScript 的 Frame 实例正在运行。当您将 Browser 导航到具有不同域的网页时,Chromium 引擎会启动这个进程。

默认情况下,每个 Renderer 进程都在沙盒中运行,因此它不能直接使用您的磁盘、网络或显示器。

GPU

在此进程中,Chromium 使用 GPU 渲染不同 Chromium Renderer 进程中加载的网页内容。

进程间通信

不同进程之间的通信是通过进程间通信(IPC)完成的。IPC 在本地机器上的两个进程之间传输数据。

为了在 Java 和 Chromium 进程之间传输数据,JxBrowser 使用基于套接字和共享内存的自己的 IPC 实现。Chromium 进程之间的通信是通过 Chromium IPC 实现完成的。

主要组成部分

Engine

管理 Chromium Main 进程的生命周期,并提供对核心 Chromium 功能的访问权限,允许管理配置文件、访问所有可用的媒体输入设备等。

要使用引擎,请使用 Engine 类。它是库对象层次结构中的顶级对象。使用该库从创建 Engine 实例开始。

有关 Engine 实例的创建和使用的详细说明,请参阅 Engine 指南。

Profile

代表一个 Chromium 配置文件。它允许将所有浏览器数据分开保存,如历史记录、cookies、缓存、代理设置、拼写检查器配置等。每个 Engine 都有一个在 Engine 初始化期间自动创建的默认配置文件。默认配置文件无法删除。

您可以使用 Profiles 服务创建新的配置文件并在不需要时将其删除。

配置文件的历史记录、cookies、缓存等文件存储在用户数据目录中。如果您使用用户数据目录配置 Engine 并创建配置文件,这个配置文件将存储在用户数据目录中,并在应用程序重启后恢复。

关于配置文件的更多信息,请参阅 Profile 指南。

Browser

这是一个 Web 浏览器控件,负责加载网页或本地 HTML 文件、在加载的网页上查找文本、修改缩放比例、处理音频、获取有关加载进度的通知、调度键盘和鼠标事件等等。

要使用此控件,请使用 Browser 类。每个 Browser 实例都属于 Profile。如果 Profile 被删除或其 Engine 实例关闭或崩溃,Browser 实例将被自动关闭。

Browser 指南中详细介绍了如何创建和使用 Browser

Frame

Browser 中加载的每个网页都有一个主 Frame。该 Frame 本身可能有子框架。您可以使用 Frame 访问和操作 DOMJavaScript。当网页被卸载时,它的 Frame 和所有子框架都会自动关闭。

工作原理

创建 Engine

当您创建一个 Engine 实例时,该库会执行以下操作。

  1. 启动 Chromium MainGPU 进程。
  2. 在 Chromium Main 进程中初始化 Chromium 引擎。
  3. 初始化默认配置文件。
  4. 在 Java 和 Chromium Main 进程之间设置 IPC 连接。
run-engineJava AppEngineChromium MainEngineChromium GPUIPCChannelChromium IPC

如果您创建两个 Engine 实例,则将为每个实例启动单独的 Chromium MainGPU 进程。例如:

run-enginesJava AppEngineEngineChromium MainEngineChromium GPUChromium MainEngineChromium GPUIPCChannelIPCChannelChromium IPCChromium IPC

创建 Browser

当您创建 Browser 实例时,该库会自动加载一个 about:blank 网页。它会引导 Chromium Renderer 进程的创建,该进程负责运行此网页的 DOM 和 JavaScript 代码:

run-browserJava AppEngineProfileBrowserFrameabout:blankDOMJSChromium MainEngineProfileBrowserChromium RendererFrameabout:blankDOMJSChromium GPUIPCChannelIPCChannelChromium IPCChromium IPC

如果您将 Browser 实例导航到网页,该页面将在此 Chromium Renderer 进程中加载。如果您随后加载具有不同域的网页,它将加载到一个新的 Chromium Renderer 进程中,该进程将自动启动。而之前为网页创建的 Chromium Renderer 进程将被关闭。

如果一个网页包含了一个来自另一个域的 IFRAME,Chromium 将会为这个 remote frame 运行一个单独的 Renderer 进程。

关闭 Browser

当您关闭 Browser 实例时,相应的 Chromium Renderer 进程会自动终止。这意味着在终止进程中运行的所有 Frame 实例也将自动关闭:

run-engine-2Java AppEngineChromium MainEngineChromium GPUIPCChannelChromium IPC

关闭 Engine

当您关闭 Engine 时,库会执行以下操作:

  1. 关闭 Java 和 Chromium Main 进程之间的 IPC 连接。
  2. 在 Chromium Main 进程中配置 Chromium 引擎。
  3. 终止 Chromium Main 和 GPU 进程。