递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 221|回复: 5
打印 上一主题 下一主题

[类库封装] 【JadeView 2.0】打造火山视窗未来UI,新一代前端框架

[复制链接]

4

主题

128

帖子

1946

积分

金牌会员

Rank: 9Rank: 9Rank: 9

积分
1946
跳转到指定楼层
楼主

JadeView v2.0

基于 Rust 的下一代高性能 WebView 窗口库

全新 API 架构 | Python SDK2 | 系统托盘 | 全局热键 | 多显示器支持


极致轻量  |  零依赖  |  原生渲染  |  16ms 启动

DLL < 1 MB  ·  无额外运行时  ·  系统内置 WebView2  ·  IPC < 1 ms

调用系统原生 WebView2(Edge 内核),无需打包浏览器引擎

支持 HTML/CSS/JS 构建桌面界面,DLL 体积不足 1 MB

资源与链接





▌ 快速概览

启动性能对比(不计算 HTML 加载时间)
测试环境:易语言下核心启动至窗口显示。来自 jade.run/spec/behavior 官方数据。
框架启动耗时核心架构
JadeView16 msRust + wry
Electron 231400 msChromium + Node.js
NW.js 0.70850 msChromium + Node.js
CEF / CefSharp数百毫秒Chromium

JadeView 完整启动流程(含加载 HTML 内容):300 ms

IPC 通信性能对比
框架往返延迟并发处理能力架构特点
JadeView< 1 ms> 800 请求/秒自定义协议 + Rust 实现
Electron 2310-50 ms~100 请求/秒Chromium + Node.js IPC
NW.js 0.708-40 ms~150 请求/秒Chromium + Node.js IPC
CEF / CefSharp5-30 ms~200 请求/秒Chromium IPC

IPC 性能优势:CPU 消耗降低 30%-50%,内存占用降低 20%-40%(相比传统 IPC 方案)

架构特点
  • 技术栈:Rust + wry(WebView)+ tao(窗口管理)+ tokio(异步运行时)+ serde(序列化)
  • 异步架构:初始化非阻塞;create_webview_window 立即返回 window_id,实际创建在事件循环线程中异步完成
  • 线程安全:所有 API 函数均为线程安全(互斥锁保护全局状态、无共享可变状态)
  • IPC 协议:基于 Fetch API 的自定义协议,发布-订阅模式事件系统
  • 分层架构:核心层 → API 层 → SDK 层 → 应用层
  • 内存安全:Rust 所有权模型 + 自动内存释放,无直接 malloc/free 调用



▌ v2.0 升级指南

新增接口(14 个符号)
接口说明
create_borderless_webview_window创建无系统标题栏的 WebView 窗口
get_window_hwnd仅无边框窗口可通过此函数获取 HWND 供 Win32 API 使用
set_protocol_service_path替代旧版 create_local_server,将本地文件夹挂载为内置协议根
yaml_set / yaml_get在数据目录读写 YAML 配置
getPath / getLocale / get_displays_info获取常用系统路径、系统界面语言(BCP47)、多显示器信息
clear_data_directory清空本应用数据目录(需携带确认令牌)
jadeview_version读取 JadeView 自身版本字符串
register_url_scheme 等自定义协议注册 / 文件关联
register_global_hotkey 等全局热键,收到 global-hotkey 事件
系统托盘相关托盘图标、菜单、事件(见 SDK 文档 "系统托盘" 分栏)


API 变更对照
v1.x 旧接口v2.0 新接口说明
create_local_serverset_protocol_service_path本地文件夹挂载为内置协议根
remove_titlebar / borderless / no_centerframe_style + x/y=-1统一窗口边框样式
(新增)register_global_hotkey全局热键注册
(新增)register_url_scheme自定义协议注册
(新增)yaml_set / yaml_get内置 YAML 配置读写
(新增)get_displays_info多显示器信息查询
(新增)get_window_hwnd获取 Win32 HWND 句柄
(新增)系统托盘系列 API图标 / 菜单 / 通知 / 事件


破坏性变更
  • 字段移除:旧版 remove_titlebar、borderless、no_center 已移除,改用 frame_style 和 x/y=-1 居中;create_local_server 废弃,替换为 set_protocol_service_path
  • 初始化签名升级:JadeView_init 从旧版变为 6 参数(新增 app_name / app_signature / single_instance 必填)
  • WebView 与窗口一一对应:统一暴露 window_id;navigate_to_url 等 API 均通过 window_id 标识目标窗口
  • 单实例模式:single_instance=1 时,第二次启动将命令行转发至已有实例,触发 second-instance 事件
  • 统一数据目录:默认为 %LOCALAPPDATA%\{app_signature}_data,作为 WebView2 会话与配置存储基准


▌ 核心 API 参考

WebViewWindowOptions — 窗口配置
字段顺序必须与 JadeView.h 一致,少填 / 多填 / 类型错位会导致静默读错内存。
字段说明
title窗口标题栏文字
width / height初始尺寸(像素)
resizable是否允许调整尺寸
frame_style边框样式:normal / no-titlebar / borderless / title-overlay(Windows 专属)
transparent是否透明背景
background_color窗口背景色(如 #1A1A2E)
theme主题:Light / Dark / System
maximized / fullscreen启动时最大化 / 全屏
x / y窗口坐标,均设 -1 时系统自动居中
always_on_top置顶显示
focus打开后是否获取键盘焦点
hide_window创建但不立即显示(预加载)
use_page_icon使用网页 favicon 作为窗口图标
content_protection [NEW]防录屏 / 截屏保护(v2.0 新增)
auto_save_state [NEW]自动记忆窗口位置和大小,450ms 防抖落盘(v2.0 新增)
min_width / min_height / max_width / max_height最小 / 最大允许尺寸


WebViewSettings — 网页行为控制
传 NULL 表示全用默认。
字段说明
autoplay媒体自动播放
background_throttling后台时降低定时器 / 动画频率(节能)
disable_right_click禁用网页右键菜单
ua自定义 User-Agent
preload_js页面加载前注入的 JavaScript 代码
allow_fullscreen允许网页使用全屏 API
postmessage_whitelistpostMessage 转发白名单,值为 UTF-8 字符串;event.origin 等于该字符串或其以此为后缀时放行;NULL 时不放行任何来源;set_protocol_service_path 加载的内置静态页不受此限制


核心 C 函数

JadeView_init — 初始化运行时
启动库内部的 GUI 线程和事件循环,登记应用名、数据目录、单实例设置。调用成功后,还需等 app-ready 事件。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t JadeView_init(
  int32_t  enable_devmod,    // 开发能力开关(DevTools 等),正式发布传 0
  const char* log_path,      // 日志文件路径;NULL = 不写文件
  const char* data_directory, // 数据根路径;NULL = 系统默认位置
  const char* app_name,      // 应用显示名,必填,用于协议 / 通知等
  const char* app_signature, // 应用唯一标识,必填,至少 6 字符
  int32_t  single_instance   // 非 0:整机只允许一个进程;再开转发命令行
);

返回值:1 = 已启动 GUI 但未就绪,须等 app-ready;0 = 启动失败(参数错或作为第二实例被踢)。

app-ready 事件返回值
情况window_idevent_data
正常启动完成1文本 success
app_name / app_signature 校验失败0JSON:{"ok":false,"code":"...","message":"..."}
GUI 线程崩溃0纯文字错误说明

必须在 JadeView_init 之前就注册 app-ready(jade_on("app-ready", ...)),否则会漏掉第一条通知。

run_message_loop — 运行消息循环
在"exe 自己跑消息循环"的旧集成方式中可能用到。DLL 嵌入场景下,循环已在 JadeView_init 起好的线程中跑,一般不用调。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t run_message_loop(void);


cleanup_all_windows — 清理全部窗口
关闭所有 JadeView 窗口、收尾资源、让事件循环结束,相当于退出前清理。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t cleanup_all_windows(void);
// 返回值:1 = 已发起关闭与清理;0 = 失败(尚未完成初始化)


SDK 生态
SDK状态适用场景
Web SDK(JS/TS)稳定WebView 内的 IPC 通信接口(jade.invoke / jade.expose)
Python SDK2v2.0 新增ctypes 封装,支持窗口 / IPC / 托盘 / 通知 / 对话框
Python SDK稳定v1.x 绑定,窗口管理与 IPC 路由
易语言 SDK已更新专为易语言开发者设计,对接 v2.0 全量 API
火山视窗 SDK已更新窗口、WebView、IPC、托盘、通知和对话框完整支持


下载包文件
文件 / 目录说明
jadeview.dll核心运行时(< 1MB)
JadeView.hC 头文件,结构体声明(字段顺序以此为准)
sdk/web/Web SDK(JS/TS)
sdk/python/Python SDK(v1.x 绑定)
sdk/python2/ [NEW]Python SDK2(v2.0 全新)
sdk/elanguage/易语言 SDK
sdk/volcano/火山视窗 SDK
docs/离线 API 文档
examples/各语言示例项目


▌ JAPK 打包格式
JAPK 是 JadeView 专属的应用资源包格式,将前端资源打包为单个 .japk 文件(签名效验机制,防篡改,隐私安全加密),分发简单、加载快速、支持混淆与签名。

打包方式
方式命令 / 工具内容保护签名适用场景
Electron ASARasar pack my-app app.japk明文开发测试
JadePack(非签名)图形界面,一键构建XOR 混淆基础保护需求
JadePack(签名)图形界面,勾选签名混淆 + 签名校验生产环境,防篡改


加载方式
JadeView 通过 set_protocol_service_path API 加载 JAPK 包,API 返回协议 URL 用于 WebView 导航:
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
#include "jadeview.h"
void load_japk_example() {
    char url_buffer[256];
    const char* japk_path = "C:\\path\\to\\your\\app.japk";
    int32_t result = set_protocol_service_path(
        japk_path,
        url_buffer,
        sizeof(url_buffer)
    );
    if (result == 1) {
        printf("协议 URL: %s\n", url_buffer);
        // 使用 url_buffer 导航 WebView
    }
}


注意:JadeView 完全兼容 Electron ASAR 格式,使用 @electron/asar 创建的包可直接加载。
打包前无需特殊配置文件,原始目录树结构会被保留。

▌ SDK 快速入门



                    

                        

                           

                           
正在渲染火山代码...

                        

                    

                    复制代码
               




JadeView — 让桌面开发回归简单

https://jade.run  |  v2.0 在线文档

点击链接加入群聊【易语言】jadeView前端UI:1103426302

回复

使用道具 举报

327

主题

2232

帖子

8938

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
8938
QQ
沙发
发表于 7 小时前 | 只看该作者
支持
火山视窗封装视频教程
回复

使用道具 举报

11

主题

163

帖子

1737

积分

银牌会员

Rank: 6Rank: 6

积分
1737
板凳
发表于 5 小时前 | 只看该作者
很强           
回复

使用道具 举报

235

主题

1602

帖子

6343

积分

金牌会员

Rank: 9Rank: 9Rank: 9

积分
6343
QQ
地板
发表于 3 小时前 | 只看该作者
111111
青浦大B哥:全国活动直播技术[/color
回复

使用道具 举报

8

主题

344

帖子

2098

积分

金牌会员

Rank: 9Rank: 9Rank: 9

积分
2098
5#
发表于 2 小时前 | 只看该作者
支持
回复

使用道具 举报

94

主题

517

帖子

2394

积分

银牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2394
6#
发表于 1 小时前 | 只看该作者
浏览器套壳软件真的好用吗?我们**的一款软件就是浏览器套壳,跟老太太下楼一样,点个复选框时不时都失败
非主流编程软件/非官方指定的/非正式版体验专员
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2026-5-15 23:18 , Processed in 0.097288 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表