架构

这是 JxBrowser 架构的概述。

概述

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

jxbrowser-architecture-diagram Java Process Java App Chromium GPU JxBrowser BrowserView Swing SWT JavaFX Engine Profile Browser Frame Chromium Main Engine Profile Browser Chromium Renderer Frame DOM JS Frame DOM JS DOM JS Frame DOM JS IPC Chromium IPC Chromium IPC Chromium IPC IPC IPC

The following sections provide details for each of the processes, the main components of the library, and describe how it all works.

进程

Java

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

Chromium

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

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

主进程

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

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

渲染器

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

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

GPU

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

进程间通信

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

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

主要组成部分

引擎

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

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

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

配置文件

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

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

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

配置文件指南中阅读有关配置文件的更多信息。

浏览器

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

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

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

框架

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

它是如何运作的

创建引擎

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

  1. 启动 Chromium 主进程和 GPU 进程。
  2. 在 Chromium 主进程中初始化 Chromium 引擎。
  3. 初始化默认配置文件。
  4. 在 Java 和 Chromium 主进程之间设置 IPC 连接。
run-engine Java App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

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

run-engines Java App Engine Engine Chromium Main Engine Chromium GPU Chromium Main Engine Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

创建浏览器

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

run-browser Java App Engine Profile Browser Frame about:blank DOM JS Chromium Main Engine Profile Browser Chromium Renderer Frame about:blank DOM JS Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

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

如果一个网页与另一个域名的网页有一个 IFRAME ,Chromium 将为这个远程框架运行一个单独的渲染器进程。

关闭浏览器

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

run-engine-2 Java App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

关闭引擎

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

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