简述JavaFX-Web

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。WebEngineWebView 组件的引擎部分,负责加载和解析网页。

WebViewWebEngine 的基本用法

基本架构

  • 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);
    }
}

WebViewWebEngine 的详细功能

加载网页

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);

高级用法

JavaFX WebView 不直接提供管理 CookieSession 的 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);

综合示例

以下是一个综合示例,展示了如何使用 WebViewWebEngine 加载网页、处理事件、执行 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);
    }
}

通过这些步骤和示例,你可以使用 WebViewWebEngine 创建功能丰富的 JavaFX 应用程序,嵌入和操作网页内容。

posted @   IMm99  阅读(437)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示