JCEF中js与java交互、js与java相互调用
jcef中js与java相互调用,java与js相互调用,chrome与java相互调用,java与chrome相互调用、jcef与java相互调用
前提:https://blog.csdn.net/weixin_44480167/article/details/133170970(java内嵌浏览器CEF-JAVA、jcef、java chrome)
转自:https://lingkang.top/archives/jcef-zhong-js-yu-java-jiao-hu
代码如下
package top.lingkang;import me.friwi.jcefmaven.CefAppBuilder;
import me.friwi.jcefmaven.CefBuildInfo;
import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.browser.CefMessageRouter;
import org.cef.callback.CefQueryCallback;
import org.cef.handler.CefMessageRouterHandlerAdapter;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;/*** @author lingkang* @created in 2023/9/22**/
public class Demo02 {public static void main(String[] args) throws Exception {CefAppBuilder builder = new CefAppBuilder();// window下不需要OSRboolean useOSR = false;builder.getCefSettings().windowless_rendering_enabled = useOSR;builder.setAppHandler(new MavenCefAppHandlerAdapter() {@Overridepublic void stateHasChanged(org.cef.CefApp.CefAppState state) {// 关闭应用时退出jvm运行if (state == CefApp.CefAppState.TERMINATED) System.exit(0);}});// 设置cef运行参数,这里为空builder.addJcefArgs(args);// 设置 cef chrome实例的目录,关键,若不设置他会默认从网络中下载,国外网络可能下载不稳定导致失败// 我的 cef chrome 位于项目的chrome目录下 C:\Users\Administrator\Desktop\project\java\demo-desktop\chromebuilder.setInstallDir(new File(System.getProperty("user.dir") + File.separator + "chrome"));// 由于是手动设置cef的chrome,我们要跳过ins检查,防止版本不一致导致从镜像站下载builder.setSkipInstallation(true);// 全局的 CefApp 每个程序只能有一个,线程安全CefApp build = builder.build();// 显示一些版本信息CefBuildInfo buildInfo = CefBuildInfo.fromClasspath();System.out.println(buildInfo);CefApp.CefVersion cefVersion = build.getVersion();System.out.println(cefVersion);// 创建一个浏览器客户端实例CefClient client = build.createClient();// 添加一个方法用于html调用它,在html中执行 window.javaQuery({...})CefMessageRouter.CefMessageRouterConfig config = new CefMessageRouter.CefMessageRouterConfig();config.jsQueryFunction = "javaQuery";// 定义方法config.jsCancelFunction = "javaQueryCancel";// 定义取消方法CefMessageRouter messageRouter = CefMessageRouter.create(config);messageRouter.addHandler(new CefMessageRouterHandlerAdapter() {@Overridepublic boolean onQuery(CefBrowser browser, CefFrame frame, long queryId, String request, boolean persistent, CefQueryCallback callback) {if ("my_call".equals(request)){// 返回影响成功的数据callback.success("get java data success!");browser.executeJavaScript("htmlFun('哈哈')",null,2);// 调用js中定义的方法// callback.failure();return true;}return false;}}, false);client.addMessageRouter(messageRouter);boolean isTransparent = true;// 透明背景// src/main/resources/index.htmlString path = Demo02.class.getResource("/index.html").getPath();// 返回的是一个 url 对象路径path=path.substring(1);// 创建一个浏览器实例CefBrowser browser = client.createBrowser(path, useOSR, isTransparent);// 获取UI组件Component uiComponent = browser.getUIComponent();// 创建 JFrame UI 用于放入chromeJFrame main = new JFrame("lingkang");main.getContentPane().add(uiComponent, BorderLayout.CENTER);main.setSize(800, 600);//大小main.setLocation(0, 0);//位置main.setVisible(true);//显示main.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {// 关闭应用时要释放资源CefApp.getInstance().dispose();main.dispose();System.exit(0);//0正常退出,1非正常退出}});}
}
src/main/resources/index.html如下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<button onclick="callJava()">调用java的javaQuery方法</button>
<script>// JavaScript调用java中的方法function callJava(){window.javaQuery({request: 'my_call',persistent: false,onSuccess: function(response) { alert(response) },onFailure: function(error_code, error_message) {}})}// java调用JavaScript中的方法function htmlFun(v){console.log(v)}
</script>
</body>
</html>
效果


相关文章:
JCEF中js与java交互、js与java相互调用
jcef中js与java相互调用,java与js相互调用,chrome与java相互调用,java与chrome相互调用、jcef与java相互调用 前提:https://blog.csdn.net/weixin_44480167/article/details/133170970(java内嵌浏览器CEF-JAVA、jcef、…...
9.20 校招 实习 内推 面经
绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招丨智行者2024年校园招聘正式启动啦 校招丨智行者2024年校园招聘正式启动啦 2、校招 | 乐动机器人2024校园招聘 校招 | 乐动机器人2024校园招聘 3、校招丨小天才2024届秋季校园招聘 …...
基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着城市化进程的加快…...
【Android Framework系列】第16章 存储访问框架 (SAF)
1 概述 Android 4.4(API 级别 19)引入了存储访问框架 (Storage Access Framework)。SAF让用户能够在其所有首选文档存储提供程序中方便地浏览并打开文档、图像以及其他文件。 用户可以通过易用的标准 UI,以统一方式在所有应用和提供程序中浏…...
Antdesign 4中让分页组件居中显示的方法
在Ant Design 4中分页组件默认是最右边显示的,而这个没有设置位置的属性的 解决办法: 在pagination的属性中增加: style: {textAlign: "center"} 在Ant Design 5中可以让pagination使用align: center来实现分页组件居中...
【笔记】ubuntu 20.04 + mongodb 4.4.14定时增量备份脚本
环境 ubuntu 20.04mongodb 4.4.14还没实际使用(20230922)后续到10月底如果有问题会修改 原理 只会在有新增数据时生成新的备份日期目录备份恢复时,如果恢复的数据库未删除,则会覆盖数据 准备 准备一个文件夹,用于…...
c++实现的一个定时器实例
/* * author: hjjdebug * date : 2023年 09月 23日 星期六 11:52:29 CST * description: 用std::thread 实现了一个定时器,深刻理解一下定时器是怎样工作的. * 参考Timer.h, Timer.cpp */ $ cat main.cpp #include "Timer.h" #include <unis…...
Python线程和进程
1、深度解析Python线程和进程 一篇文章带你深度解析Python线程和进程 - 知乎使用Python中的线程模块,能够同时运行程序的不同部分,并简化设计。如果你已经入门Python,并且想用线程来提升程序运行速度的话,希望这篇教程会对你有所帮…...
算法 寻找峰值-(二分查找+反向双指针)
牛客网: BM19 题目: 寻找数组峰值,可能多个返回任一个,每个值满足nums[i] ! nums[i 1] 思路: 双指针 left 0, right n-1, 相向而行,取中间位置mid, nums[mid]与nums[mid1]比较,如果nums[mid] < nums[mid1],说明…...
【数据结构】—交换排序之快速排序究极详解,手把手带你从简单的冒泡排序升级到排序的难点{快速排序}(含C语言实现)
食用指南:本文在有C基础的情况下食用更佳 🔥这就不得不推荐此专栏了:C语言 ♈️今日夜电波:靴の花火—ヨルシカ 0:28━━━━━━️💟──────── 5:03 …...
【c#-Nuget 包“在此源中不可用”】 Nuget package “Not available in this source“
标题c#-Nuget 包“在此源中不可用”…但 VS 仍然知道它吗? (c# - Nuget package “Not available in this source”… but VS still knows about it?) 背景: 今日从公司svn 上拉取很久很久以前的代码,拉取下来200报错,进一步发…...
【数据结构】二叉树之堆的实现
🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、二叉树的顺序结构 📒1.1顺序存储 📒1.2堆的性质…...
电工-三极管输入输出特性曲线讲解
三极管特性曲线是反映三极管各电极电压和电流之间相互关系的曲线,是用来描述晶体三极管工作特性曲线,常用的特性曲线有输入特性曲线和输出特性曲线。这里以下图所示的共发射极电路来分析三极管的特性曲线。 输入特性曲线 该曲线表示当e极与c极之间的电…...
深入解析容器与虚拟化:技术、对比与生态
深入解析容器与虚拟化:技术、对比与生态 文章目录 深入解析容器与虚拟化:技术、对比与生态容器和虚拟化的基本概念和原理容器的定义和特点虚拟化的定义和特点 容器使用场景容器和虚拟机的对比虚拟化技术的四个特点容器实现虚拟化的原理常见容器引擎和容器…...
制作游戏demo的心得
制作这个游戏demo出来的心得 https://www.bilibili.com/video/BV1cF411m7Dh/ 制作游戏demo的心得 制作游戏demo,主要是为了表现自己的技术,那就一门心思想着如何提高表现力就行了,在整体的画面渲染风格方面或许没有什么可选择的,…...
Web Tour Server窗口闪现
1.打开该文件所在位置 2.右击选择编辑,在最后一行加上pause,保存后重新打开Server窗口 3.重新打开后,若出现以下情况: 以管理员身份打开cmd命令行,输入命令netstat -aon|findstr “1080”,查看1080端口占用…...
Linux下的基本指令
目录 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要): 06.rmdir指令 && rm 指令(重要): 07.man指令(重要): 08mv指令ÿ…...
随机数生成器代码HTML5
代码如下 <!DOCTYPE html> <html> <head> <title>随机数生成器</title> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <style> body { text-align: center; bac…...
正确理解redux Toolkits中createSlice的action.payload
使用redux Toolkits中的createSlice编写extraReducers经常看到使用action.payload来更新state状态值: 那么action.payload指的到底是什么? 让我们看看action的定义部分: 注意: action.payload不是上面ajax请求的返回内容&#x…...
YOLOv8快速复现 官网版本 ultralytics
YOLOV8环境安装教程.:https://www.bilibili.com/video/BV1dG4y1c7dH/ YOLOV8保姆级教学视频:https://www.bilibili.com/video/BV1qd4y1L7aX/ b站视频:https://www.bilibili.com/video/BV12p4y1c7UY/ 1 平台搭建YOLOv8 平台:https://www.a…...
TI毫米波雷达的测距极限:带宽、采样率与最大探测距离到底什么关系?
TI毫米波雷达测距极限:从理论公式到工程实践的深度解析 在自动驾驶和工业传感领域,毫米波雷达因其全天候工作能力和精确测距特性成为核心传感器。德州仪器(TI)的AWR和IWR系列雷达芯片凭借高集成度和灵活配置,被广泛应用于无人机避障、智能停车…...
ARM PMU性能监控架构与PMCEID2寄存器详解
1. ARM PMU性能监控架构概述性能监控单元(Performance Monitoring Unit, PMU)是现代处理器中用于硬件级性能分析的核心模块。在ARM架构中,PMU通过一组可编程的事件计数器实现对处理器微架构行为的精确监控。这些计数器可以记录诸如指令执行周期、缓存命中/失效、分支…...
FPGA技术知识管理:构建个人阅读仓库,实现体系化学习与创新
1. 项目概述:FPGA技术文献的体系化阅读与知识管理在数字电路设计和硬件加速领域,FPGA(现场可编程门阵列)以其独特的并行处理能力和硬件可重构性,始终占据着技术演进的前沿。然而,与成熟的软件生态不同&…...
学Simulink——弱电网条件下双向DC-AC逆变器的鲁棒电流控制仿真
目录 手把手教你学Simulink——弱电网条件下双向DC-AC逆变器的鲁棒电流控制仿真 一、背景与挑战 1.1 什么是弱电网?为什么它“弱”? 1.2 核心痛点与鲁棒控制目标 二、系统架构与核心控制推导 2.1 整体架构:功率级(含 Lg&am…...
AI应用开发利器:Prompster提示词管理库的设计与实践
1. 项目概述:一个为AI应用开发者准备的提示词管理利器如果你正在开发基于大语言模型(LLM)的应用,无论是聊天机器人、内容生成工具,还是复杂的AI工作流,那么你一定对“提示词工程”这个词深有体会。从最初的…...
【SAP工作】1.ECC与S4HANA后台表对比
查看表的Tcode:SE11,SE16N,SM30,SE38FIS4 HANABKPF会计凭证抬头存储凭证编号、日期、公司代码、凭证类型等不变BSEG会计凭证行项目存储科目、金额、税码、成本中心等明细ACDOCABSEG降级SKA1总帐科目主数据(科目表级&am…...
半导体行业资本投入与技术创新:英特尔IDM模式解析
1. 半导体行业的资本游戏:为什么持续投入是制胜关键 半导体行业有个不成文的规则:要么大笔投入,要么趁早退出。这个行业的准入门槛之高令人咋舌——建一座先进晶圆厂动辄需要百亿美元起步,而研发新一代制程工艺的投入更是天文数字…...
基于RBAC与工作流融合的企业办公自动化系统-开题报告
目录RBAC与工作流融合的企业办公自动化系统开题报告概述关键技术分析系统架构设计预期成果与创新点实施计划与风险评估项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作点击我获取源码->->进我个人主页…...
低功耗单板计算机在远程传感中的设计与优化
1. 低功耗单板计算机的远程传感革命在阿拉斯加的输油管道监控站里,一台体积仅相当于信用卡大小的计算机已经连续工作三年,仅靠两节锂电池和一块巴掌大的太阳能板维持运转。这个真实案例展示了低功耗单板计算机(SBC)在极端环境下的惊人潜力。不同于传统工…...
同态加密优化与安全字符串匹配技术解析
1. 同态加密与安全字符串匹配技术概述在现代数据隐私保护领域,同态加密(Homomorphic Encryption, HE)技术因其独特的"加密数据可计算"特性而备受关注。这项技术允许第三方在不解密的情况下对加密数据进行特定计算,计算结果解密后与对明文直接计…...
