开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1567|回复: 112
收起左侧

[易源码分享] 【JadeView 2.0】打造易语言未来UI,新一代前端框架

[复制链接]
回帖奖励 185 枚 精币 回复本帖可获得 5 枚 精币奖励! 每人限 1 次(中奖概率 50 %)

结帖率:96% (87/91)
发表于 前天 14:23 | 显示全部楼层 |阅读模式   湖北省十堰市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 花老板 于 2026-5-16 08:25 编辑

E89696B81B1C51FF33759459EF042BF2.jpg

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_titlebarborderlessno_center 已移除,改用 frame_stylex/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++] 纯文本查看 复制代码
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++] 纯文本查看 复制代码
int32_t run_message_loop(void);


cleanup_all_windows — 清理全部窗口
关闭所有 JadeView 窗口、收尾资源、让事件循环结束,相当于退出前清理。
[C++] 纯文本查看 复制代码
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++] 纯文本查看 复制代码
#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 快速入门

易语言示例
以下为易语言 SDK 封装后的实际调用方式,函数名遵循易语言命名风格。
  
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
JadeViewJadeView  
托盘jade托盘类  
集_托盘id整数型  
集_热键id整数型  

子程序名返回值类型公开备 注
_启动子程序整数型 
' 1. 注册程序事件(必须在初始化之前)
JadeView.注册程序事件 ("app-ready", &JadeView准备就绪)
JadeView.注册程序事件 ("window-all-closed", &事件_所有窗口关闭)
JadeView.注册程序事件 ("global-hotkey", &全局热键事件)
' 2. 注册前端 IPC 消息
JadeView.ipc_订阅 ("win:minimize", &ipc_最小化)
JadeView.ipc_订阅 ("win:toggle_maximize", &ipc_最大化切换)
JadeView.ipc_订阅 ("win:close_last", &ipc_关闭窗口)
' 3. 初始化(v2.0 新签名)
JadeView.初始化 (是否为调试版 (), 取运行目录 () + "\log.txt", 取运行目录 (), "web", "ceshi_demo", )
' 4. 进入消息循环(阻塞,直至退出)
JadeView消息循环 ()
返回 (0)
子程序名返回值类型公开备 注
JadeView准备就绪  
参数名类 型参考可空数组备 注
成功否逻辑型
err文本型
变量名类 型静态数组备 注
窗口设置JadeView窗口设置 
视窗设置JadeView视窗设置 
载入url文本型 
窗口id整数型 
如果真 (成功否)
' 5. 创建本地服务并设置窗口参数
载入url = JadeView创建本地服务 (取运行目录 () + "\web")
窗口设置.标题 = GBK文本到UTF8文本 ("我的应用")
窗口设置.宽度 = 1280
窗口设置.高度 = 800
窗口设置.边框样式 = #标题栏_无标题栏_无边框
窗口设置.透明背景 = 假
窗口设置.X坐标 = -1
窗口设置.Y坐标 = -1
窗口设置.使用页面图标 = 真
视窗设置.开启右键菜单 = 假
' 6. 创建窗口
窗口id = JadeView.创建窗口 (载入url, , 窗口设置, 视窗设置)
如果真 (窗口id > 0)
JadeView.设置窗口背景材料 (窗口id, "mica")
' 7. 创建系统托盘
集_托盘id = 托盘.创建托盘 ()
托盘.设置托盘图标 (集_托盘id, 取运行目录 () + "\web\app.ico")
托盘.设置托盘提示文本 (集_托盘id, "我的应用")
' 8. 注册全局热键(Ctrl+F12)
集_热键id = JadeView.注册全局热键 ( #MOD_CONTROL, #F12键 )
' 9. YAML 配置读写
JadeView.设置yaml ("app.yaml", "ui.theme", "dark")
调试输出 ("当前主题", JadeView.获取yaml ("app.yaml", "ui.theme"))

子程序名返回值类型公开备 注
事件_所有窗口关闭  
参数名类 型参考可空数组备 注
窗口ID整数型
数据文本型
JadeView.退出 ()
子程序名返回值类型公开备 注
全局热键事件  
参数名类 型参考可空数组备 注
winid整数型
msg文本型
调试输出 ("热键触发", msg)
子程序名返回值类型公开备 注
ipc_最小化整数型 
参数名类 型参考可空数组备 注
WinId整数型
msg文本型
JadeView.设置窗口最小化 (WinId)
返回 (0)
子程序名返回值类型公开备 注
ipc_最大化切换整数型 
参数名类 型参考可空数组备 注
WinId整数型
msg文本型
如果 (JadeView.获取窗口最大化状态 (WinId))
JadeView.设置窗口还原 (WinId)
JadeView.设置窗口最大化 (WinId)
返回 (0)
子程序名返回值类型公开备 注
ipc_关闭窗口整数型 
参数名类 型参考可空数组备 注
WinId整数型
msg文本型
JadeView.销毁窗口 (WinId)
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库


Python SDK2
jadeview 2.0 的 Python 绑定库,基于 ctypes 封装 DLL,API 命名与前端 JS API 保持一致。

安装
[Bash shell] 纯文本查看 复制代码
pip install jadeview      # 或 uv add jadeview


模块总览
模块导入功能
jadeviewimport jadeview初始化、消息循环、清理
jadeview.windowfrom jadeview import window窗口创建与管理
jadeview.webviewfrom jadeview import webview导航、JS 执行、缩放
jadeview.ipcfrom jadeview import ipc事件订阅、IPC 通信
jadeview.dialogfrom jadeview import dialog系统对话框
jadeview.trayfrom jadeview import tray系统托盘
jadeview.notificationfrom jadeview import notification系统通知
jadeview.toolsfrom jadeview import tools工具函数(路径 / 语言 / YAML / 热键等)
jadeview.eventsfrom jadeview import events事件名称常量


基础生命周期示例
[Python] 纯文本查看 复制代码
import jadeview
from jadeview import events

def on_ready(window_id, data):
    win_id = jadeview.window.create_webview_window(
        "https://example.com",
        title="Hello JadeView",
        width=1024, height=768,
    )

def on_all_closed(window_id, data):
    jadeview.cleanup()

jadeview.ipc.on(events.APP_READY, on_ready)
jadeview.ipc.on(events.WINDOW_ALL_CLOSED, on_all_closed)

jadeview.init("MyApp", "myapp1", enable_devmod=True)
jadeview.run()


常用 API 速查
分类函数说明
事件ipc.on(event, callback)注册事件回调(APP_READY / WINDOW_CLOSING / GLOBAL_HOTKEY 等)
窗口window.create_webview_window(url, ...)创建 WebView 窗口,支持 title / theme / transparent 等参数
窗口window.set_window_focus(window_id)设置窗口焦点
窗口window.set_window_backdrop(win_id, type)设置背景效果(mica / acrylic,需透明窗口)
IPCipc.register_ipc_handler(name, handler)注册 IPC 通道处理器,处理前端 invoke 请求
IPCipc.send_ipc_message(window_id, channel, data)Python 向 WebView 前端推送消息
对话框dialog.show_open_dialog(window_id, ...)同步打开文件选择对话框
对话框dialog.show_save_dialog(window_id, ...)同步保存文件对话框
托盘tray.tray_create() / tray_destroy(id)创建 / 销毁系统托盘
托盘tray.tray_set_menu_items(id, items)设置托盘右键菜单(item_type: 0=普通 1=子菜单 2=分隔线)
通知notification.show_notification(title, ...)显示系统通知(支持 body / button / action)
工具tools.set_protocol_service_path(path)将本地目录挂载为协议根路径
工具tools.jadeview_version()获取 JadeView 版本号
工具tools.get_locale()获取系统语言(BCP47)
工具tools.yaml_set / yaml_get(file, key, val)YAML 配置持久化读写(自动存储在应用数据目录)
工具tools.register_global_hotkey(mod, key)注册全局热键 → GLOBAL_HOTKEY 事件
工具tools.register_url_scheme(scheme)注册自定义 URL 协议(HKCU)
工具tools.register_file_association(ext, desc)关联文件扩展名打开方式


▌ 版本更新日志

v2.0.0(当前版本,架构级升级)

新增(11项)
  • 全新 API 架构,统一 WebViewWindowOptions 结构体
  • 系统托盘(图标 / 菜单 / 通知 / 事件)
  • 全局热键 register_global_hotkey + global-hotkey 事件
  • 内置 YAML 配置读写 yaml_set / yaml_get
  • 多显示器信息查询 get_displays_info
  • 自定义 URL 协议注册 register_url_scheme
  • 获取原生 Win32 HWND:get_window_hwnd
  • 防录屏保护 content_protection
  • 窗口状态记忆 auto_save_state(450ms 防抖落盘)
  • Python SDK2:基于 ctypes 的全量 v2.0 绑定
  • 火山视窗 SDK 全面升级,支持托盘、通知、对话框

变更
  • create_local_server 更名为 set_protocol_service_path
  • JadeView_init 新增 app_name / app_signature / single_instance 三个必填参数

破坏性变更
  • 移除旧版 remove_titlebar / borderless / no_center 字段,改用 frame_style + x/y=-1 居中


JadeView — 让桌面开发回归简单

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

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

评分

参与人数 9好评 +1 精币 +10 收起 理由
xhping + 1 感谢分享,很给力!~
zjbin1989 + 1 感谢分享,很给力!~
cbl521ysys + 1 感谢分享,很给力!~
恒大大 + 1 感谢分享,很给力!~
文西哥 + 1 感谢分享,很给力!~
kyo9766 + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
cui870222829 + 1 感谢分享,很给力!~
荼泱 + 1 + 2 共同努力,共同进步

查看全部评分


结帖率:100% (24/24)

签到天数: 14 天

发表于 3 小时前 | 显示全部楼层   河南省周口市

感谢分享
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 3 小时前 | 显示全部楼层   浙江省衢州市

回帖奖励 +5 枚 精币

感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 3 小时前 | 显示全部楼层   上海市上海市

回帖奖励 +5 枚 精币

支持支持 学习了 支持啊
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 8 天

发表于 8 小时前 | 显示全部楼层   福建省福州市

回帖奖励 +5 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 13 天

发表于 10 小时前 | 显示全部楼层   广西壮族自治区玉林市

回帖奖励 +5 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

结帖率:83% (20/24)

签到天数: 8 天

发表于 11 小时前 | 显示全部楼层   福建省厦门市
学习一下,谢谢开发
回复 支持 反对

使用道具 举报

签到天数: 15 天

发表于 昨天 22:50 | 显示全部楼层   江西省南昌市

回帖奖励 +5 枚 精币

启动性能对比(不计算 HTML 加载时间)
回复 支持 反对

使用道具 举报

签到天数: 13 天

发表于 昨天 22:40 | 显示全部楼层   辽宁省丹东市

回帖奖励 +5 枚 精币

感谢分享
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 昨天 22:04 | 显示全部楼层   湖南省邵阳市
感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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