Maven
版本22.x
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>22.0.2</version>
</dependency>
简述
WebView
是 JavaFX 提供的一个组件,用于在 JavaFX 应用程序中嵌入和显示网页内容。WebView
组件基于 WebKit 渲染引擎,能够呈现 HTML、CSS 和执行 JavaScript。WebEngine
是 WebView
组件的引擎部分,负责加载和解析网页。
WebView
和 WebEngine
的基本用法
基本架构
WebView
:用于在 JavaFX 场景图中显示网页。WebEngine
:提供加载网页、处理用户输入和执行 JavaScript 的功能。
创建和使用 WebView
public class WebViewExample extends Application {
@Override
public void start(Stage stage) {
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
// 加载网页
webEngine.load("https://www.example.com");
// 创建布局并将 WebView 添加到场景中
BorderPane root = new BorderPane();
root.setCenter(webView);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
stage.setTitle("JavaFX WebView Example");
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
WebView
和 WebEngine
的详细功能
加载网页
WebEngine
提供了多种加载网页的方法:
webEngine.load("https://www.example.com"); // 加载URL
webEngine.loadContent("<html><body><h1>Hello, World!</h1></body></html>"); // 加载HTML内容
处理网页事件
WebEngine
支持处理多种网页事件,例如加载状态变化、JavaScript 警告和错误等。
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
System.out.println("Page loaded successfully");
}
});
执行 JavaScript
WebEngine
可以执行 JavaScript,并与网页中的 JavaScript 交互。
webEngine.executeScript("document.body.style.backgroundColor = 'lightblue';");
访问网页内容
可以通过 JavaScript 访问网页内容并将结果返回给 Java:
String content = (String) webEngine.executeScript("document.documentElement.outerHTML");
System.out.println(content);
高级用法
处理 Cookie 和 Session
JavaFX WebView
不直接提供管理 Cookie
和 Session
的 API,但可以通过 JavaScript 操作Cookie
。
webEngine.executeScript("document.cookie = 'username=John Doe';");
String cookies = (String) webEngine.executeScript("document.cookie");
System.out.println(cookies);
与 DOM 交互
可以通过 JavaScript 操作网页的DOM
。
webEngine.executeScript("document.getElementById('myElement').textContent = 'New Content';");
WebView
的常见问题和解决方案
页面加载失败
检查网络连接,确保指定的 URL 有效。如果需要处理 HTTPS 请求,确保 JDK 支持相应的安全协议。
JavaScript 不执行
确保在 WebEngine
上启用了 JavaScript:
webEngine.setJavaScriptEnabled(true);
综合示例
以下是一个综合示例,展示了如何使用 WebView
和 WebEngine
加载网页、处理事件、执行 JavaScript 和操作 DOM:
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class WebViewExample extends Application {
@Override
public void start(Stage stage) {
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
// 启用 JavaScript
webEngine.setJavaScriptEnabled(true);
// 加载网页
webEngine.load("https://www.example.com");
// 处理加载状态变化
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
System.out.println("Page loaded successfully");
// 执行 JavaScript
webEngine.executeScript("document.body.style.backgroundColor = 'lightblue';");
// 访问网页内容
String content = (String) webEngine.executeScript("document.documentElement.outerHTML");
System.out.println(content);
}
});
// 创建布局并将 WebView 添加到场景中
BorderPane root = new BorderPane();
root.setCenter(webView);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
stage.setTitle("JavaFX WebView Example");
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
通过这些步骤和示例,你可以使用 WebView
和 WebEngine
创建功能丰富的 JavaFX 应用程序,嵌入和操作网页内容。