首页 > 编程语言 >简述JavaFX-Web

简述JavaFX-Web

时间:2024-07-31 14:30:28浏览次数:12  
标签:Web 网页 JavaScript JavaFX 简述 webEngine WebView 加载 WebEngine

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 应用程序,嵌入和操作网页内容。

标签:Web,网页,JavaScript,JavaFX,简述,webEngine,WebView,加载,WebEngine
From: https://www.cnblogs.com/siyongbo/p/18334526

相关文章

  • WEB渗透Web突破篇-SQL注入(SQLMAP)
    WEB渗透Web突破篇-SQL注入(数据库判断)-CSDN博客WEB渗透Web突破篇-SQL注入(MYSQL)-CSDN博客WEB渗透Web突破篇-SQL注入(MSSQL)-CSDN博客WEB渗透Web突破篇-SQL注入(Oracle)-CSDN博客WEB渗透Web突破篇-SQL注入(PostgreSQL)-CSDN博客WEB渗透Web突破篇-SQL注入(SQLite)-CSDN博客WEB渗透Web......
  • test 2D渲染器 WebGL WebGL2
    1import{Box,Matrix3,Vector2}from'./Utils.js';2import{Shape,ShapeUtils,SplineCurve}from'./TwoUtils.js';34constBlendEquationAdd=[0,-1];56constBlendDefault=[6,7,-1,-1],7BlendAdd=......
  • hackme,aiweb,tomato靶机解析大礼包
    注:所有靶机均只做到连接木马,并未提权寻找flag,问就是不会o(╥﹏╥)ohackme靶机1.导入靶机,查看其网段,使用端口扫描工具(御剑2014)进行扫描,获取端口后进入2.注册一个账户登录3.随机输入,点击search,抓包,在搜索框后加*,使用sqlmap注入4.获取数据库,表,数据5.......
  • NSSCTF web入门题鉴赏
    前言思来想去还是觉得web好玩一点哈哈,尝试过crypto更能懂那种痛楚[SWPUCTF2021新生赛]Do_you_know_httphttps://www.nssctf.cn/problem/385这道题就是简单的http协议刚开始是'WLLM'browser!这个题眼,于是我们上网络查询一下,发现useragency并不是它,那就需要我们去改一下us......
  • 【Websim.ai】一句话让AI帮你生成一个网页
    【Websim.ai】一句话让AI帮你生成一个网页网站链接websim.ai简介websim.ai接入了ClaudeSonnet3.5,GPT-4o等常用的LLM,只需要在websim.ai的官网指令栏中编写相关指令,有点类似大模型的Prompt,指令的好坏决定了网页生成的质量。生成的网页可以有很多用途,比如说生成游戏:俄......
  • 部署 Blender 脚本以用作 Web 服务器上的 api
    我在Nextjs中有一个网站和一个混合器脚本,它获取图像、纹理图像并将它们合并在一起,同时应用一些视觉效果(如深度)、渲染结果并将渲染结果的png图像返回到前端以供使用网站中的img标签。我制作了一个pythonFlask应用程序,安装了搅拌机,并制定了将搅拌机作为子进程运行的路线,......
  • javaweb面向切面aop编程-实现自定义填充
    实现自定义填充注解@AutoFill创建annotation包,编写注解类点击查看代码/***自定义注解,用于标识某个方法需要进行功能字段自动填充处理*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceAutoFill{//数据库操作类型:UPDATEINSE......
  • Web 安全:Memcached 未授权访问漏洞.(11211端口)
    Web安全:Memcached未授权访问漏洞Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现。然而Memcached的默认配置,11211端口 不需要密码即可访问,可以直接连接到Memcached服务的11211端口获取......
  • 了解Web标准,HTML 语法规范,使用 HBuilder X 构建文档骨架,HBuilder X 生成骨架标签新增
    Web标准是由W3C组织和其他标准化组织制定的一系列标准的集合。W3C(万维网联盟)是国际最著名的标准化组织。遵循Web标准可以让不同的开发人员写出的页面更标准、更统一外,还有以下优点:1.让Web的发展前景更广阔。2.内容能被更广泛的设备访问。3.更容易被搜寻引擎搜索。......
  • WebSocket 的产生
    HTTP不断轮询怎么样才能在用户不做任何操作的情况下,网页能收到消息并发生变更。最常见的解决方案是,网页的前端代码里不断定时发HTTP请求到服务器,服务器收到请求后给客户端响应消息。这种方式的应用场景很多,例如扫码登录,前端网页不知道用户是否扫描,只能不断询问后端服务器。......