窗口 API
窗口 API 提供了创建和管理窗口的所有功能,包括创建窗口、调整大小、设置主题等。
页面导航、脚本执行、DevTools、打印等 WebView 相关操作见 WebView API。
以下函数都针对某个 window_id(创建窗口时返回的整数)。没有特殊说明时,成功多为 1,失败为 0。
创建窗口
创建普通窗口
创建一个带系统标题栏和边框的浏览器窗口,里面跑 WebView。这是最常用的主窗口创建方式。
uint32_t create_webview_window(
const char* url,
uint32_t parent_window_id,
const WebViewWindowOptions* options,
const WebViewSettings* webview_settings
);
参数:
-
urlstring- 第一次打开的网址或本地协议地址 -
parent_window_iduint32_t- 父窗口,0表示顶层窗口 -
optionsWebViewWindowOptions*(可选) - 窗口外观配置,可传NULL使用默认值WebViewWindowOptions 选项:
titlestring- 窗口标题栏上的文字widthint32_t- 初始宽度(像素)heightint32_t- 初始高度(像素)resizableint32_t- 用户能不能用鼠标拖边缘改大小frame_stylestring- 要系统边框+标题栏、只要边框不要标题栏、完全无边框、还是无边框+内置标题栏按钮覆盖层(normal/no-titlebar/borderless/title-overlay)。title-overlay为 Windows 专属,提供有边框+无标题栏+右上角内置标题栏按钮,无需自行实现窗口控制按钮功能transparentint32_t- 是否透明背景(和 WebView、系统能力有关)background_colorstring- 窗口背景色字符串(如带#的十六进制)always_on_topint32_t- 是否总在最前themestring- 浅色 / 深色 / 跟随系统(Light、Dark、System)maximizedint32_t- 打开时是否最大化maximizableint32_t- 标题栏上是否允许最大化按钮生效minimizableint32_t- 标题栏上是否允许最小化按钮生效xint32_t- 窗口左上角 x 坐标;两个都是 -1 表示让系统帮你居中yint32_t- 窗口左上角 y 坐标;两个都是 -1 表示让系统帮你居中min_widthint32_t- 允许的最小宽度;0通常表示不限制min_heightint32_t- 允许的最小高度;0通常表示不限制max_widthint32_t- 允许的最大宽度;0通常表示不限制max_heightint32_t- 允许的最大高度;0通常表示不限制fullscreenint32_t- 打开时是否全屏focusint32_t- 打开后是否抢键盘焦点hide_windowint32_t- 非 0 时先创建但不显示(适合先加载再show)use_page_iconint32_t- 是否用网页 favicon 当初步窗口图标content_protectionint32_t- 是否开启防录屏/截屏类保护auto_save_stateint32_t- 非0:在数据目录下的window_state.yaml里按window_id记录窗口最后一次有效的物理左上角坐标;下次用同一window_id创建时,若该位置仍落在某块屏的工作区内,则恢复位置(宽高、是否最大化仍以本次创建参数为准)。移动停止约 450ms 后防抖落盘;关闭时也会再存一次
-
webview_settingsWebViewSettings*(可选) - 网页行为配置,可传NULL使用默认值WebViewSettings 选项:
autoplayint32_t- 媒体能不能自动播放background_throttlingint32_t- 窗口在后台时是否降低定时器/动画频率省资源disable_right_clickint32_t- 是否禁用网页右键菜单uastring- 自定义 User-Agentpreload_jsstring- 页面加载前要注入的一段 JSallow_fullscreenint32_t- 网页里全屏 API 是否允许postmessage_whiteliststring- 页面postMessage是否转发给宿主的白名单,值为一条 UTF-8 字符串(通常接近页面的origin,如https://example.com)。库在匹配时:event.origin等于该字符串,或origin以该字符串为后缀,则通过。若指针为NULL/未设置:当前实现下不会放行任何来源(即收不到postmessage-received)。通过set_protocol_service_path加载的内置静态页在实现里会跳过白名单、始终可收cors_whiteliststring- 版本支持 v2.1+, CORS 来源白名单,逗号或分号分隔的域名列表(如"http://198.18.0.1:8001, http://localhost:3000")。- 严格精确匹配,不支持通配符。设置后仅允许白名单内的来源跨域请求 JadeView 内部 API(invoke、on);不设置(
NULL)或空字符串则不允许任何跨域,无法与程序通信。
- 严格精确匹配,不支持通配符。设置后仅允许白名单内的来源跨域请求 JadeView 内部 API(invoke、on);不设置(
注意以下结构在 v2.2 开始支持
autofillint32_t- 是否启用账号/密码自动填充。0= 禁用,1= 启用。general_autofill_enabledint32_t- 是否启用通用表单自动填充(姓名/地址/电话等)。0= 禁用,1= 启用。incognitoint32_t- 是否以无痕/隐私浏览模式运行。0= 正常模式,1= 无痕模式。开启后页面渲染会变慢。disable_clipboardint32_t- 是否禁用剪贴板读写权限。0= 允许,1= 禁用。proxy_urlstring- 代理URL,支持 HTTP 和 SOCKS5 代理(如"http://127.0.0.1:7890"或"socks5://127.0.0.1:1080")。NULL表示不使用代理。focusedint32_t- WebView 初始是否自动获取焦点。0= 不获取焦点,1= 自动聚焦(默认1)。
返回值:
> 0- 窗口 id,真正画出来可能稍晚,可结合window-created等事件0- 失败,例如在app-ready之前就调用了
2.0 已删掉旧版的 remove_titlebar、borderless、no_center 等字段,必须用 frame_style 和 x/y=-1 居中,否则结构体对不上会静默错位。
创建无边框窗口
创建一个没有系统标题栏的 WebView 窗口,适合自绘标题栏、悬浮工具窗等场景。边框样式固定为无边框。
uint32_t create_borderless_webview_window(
const char* url,
const WebViewSettings* webview_settings
);
参数:
urlstring- 第一次打开的网址或本地协议地址webview_settingsWebViewSettings*(可选) - 网页行为配置,可传NULL使用默认值
返回值:
返回非 0 即 window_id。导航、IPC、执行 JS 和普通窗口一样用这个 id。
获取窗口句柄
在 C/C++ 里要把窗口交给别的 Win32 API(例如 SetWindowPos、子控件挂靠)时,需要 HWND。
注意:只有用 create_borderless_webview_window 创建的窗口才会返回有效句柄数值;普通 create_webview_window 一律返回 0(库故意不暴露)。
size_t get_window_hwnd(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
位置、尺寸与标题
设置窗口标题
改变窗口标题栏上显示的文字(和 HTML 里的 <title> 可以不同)。
int32_t set_window_title(uint32_t window_id, const char* title);
参数:
window_iduint32_t- 目标窗口 idtitlestring- 新的窗口标题
设置窗口大小
按像素改变窗口宽度和高度。
int32_t set_window_size(uint32_t window_id, int32_t width, int32_t height);
参数:
window_iduint32_t- 目标窗口 idwidthint32_t- 新的宽度(像素)heightint32_t- 新的高度(像素)
设置窗口位置
按像素改变窗口在屏幕上的位置。
int32_t set_window_position(uint32_t window_id, int32_t x, int32_t y);
参数:
window_iduint32_t- 目标窗口 idxint32_t- 新的 X 坐标yint32_t- 新的 Y 坐标
获取窗口位置和尺寸(get_window_bounds)
v2.2 开始支持。
int32_t get_window_bounds(uint32_t window_id, char* buffer, int buffer_size);
参数:
window_iduint32_t- 目标窗口 idbufferchar*- 输出缓冲区buffer_sizeint- 缓冲区大小
返回值: 1 = 成功,buffer 写入 JSON {"x":0,"y":0,"width":800,"height":600};0 = 失败
显隐与焦点
显示或隐藏窗口
显示或隐藏窗口(最小化以外的显隐)。
int32_t set_window_visible(uint32_t window_id, int32_t visible);
参数:
window_iduint32_t- 目标窗口 idvisibleint32_t- 非0显示,0隐藏
让窗口获得焦点
让该窗口拿到键盘焦点。
int32_t set_window_focus(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
设置窗口置顶
是否置顶,不被其它普通窗口挡住。
int32_t set_window_always_on_top(uint32_t window_id, int32_t always_on_top);
参数:
window_iduint32_t- 目标窗口 idalways_on_topint32_t- 非0置顶,0取消置顶
设置忽略鼠标事件(set_window_ignore_cursor_events)
v2.2 开始支持。
设置窗口是否忽略鼠标事件(鼠标穿透),适用于悬浮窗 / overlay 场景。
int32_t set_window_ignore_cursor_events(uint32_t window_id, int ignore);
- 参数:
window_id、ignore(1= 忽略鼠标事件/穿透,0= 正常) - 返回值:
1= 成功,0= 失败
窗口状态
最小化窗口
把窗口收到任务栏。
int32_t minimize_window(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
切换最大化状态
在最大化和还原之间切换一下。
int32_t toggle_maximize_window(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
查询是否最大化
查询当前是不是最大化状态。
int32_t is_window_maximized(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
返回值:
1- 当前是最大化状态0- 当前不是最大化状态
设置全屏
进入或退出全屏(铺满显示器,不是单纯最大化)。请求会异步生效;也可监听 window-fullscreen 事件。
int32_t set_window_fullscreen(uint32_t window_id, int32_t fullscreen);
参数:
window_iduint32_t- 目标窗口 idfullscreenint32_t- 非0进入全屏,0退出全屏
查询窗口是否最小化(is_window_minimized)
v2.2 开始支持。
int32_t is_window_minimized(uint32_t window_id);
- 参数:
window_iduint32_t - 返回值:
1= 已最小化,0= 否
查询窗口是否可见(is_window_visible)
v2.2 开始支持。
int32_t is_window_visible(uint32_t window_id);
- 参数:
window_iduint32_t - 返回值:
1= 可见,0= 不可见
查询窗口是否聚焦(is_window_focused)
v2.2 开始支持。
int32_t is_window_focused(uint32_t window_id);
- 参数:
window_iduint32_t - 返回值:
1= 已聚焦,0= 否
查询窗口是否全屏(is_window_fullscreen)
v2.2 开始支持。
int32_t is_window_fullscreen(uint32_t window_id);
- 参数:
window_iduint32_t - 返回值:
1= 全屏,0= 否
窗口约束
设置窗口最小尺寸(set_window_min_size)
v2.2 开始支持。
int32_t set_window_min_size(uint32_t window_id, int32_t width, int32_t height);
- 参数:
window_id、width(最小宽度)、height(最小高度) - 返回值:
1= 成功,0= 失败
设置窗口最大尺寸(set_window_max_size)
v2.2 开始支持。
int32_t set_window_max_size(uint32_t window_id, int32_t width, int32_t height);
- 参数:
window_id、width(最大宽度)、height(最大高度) - 返回值:
1= 成功,0= 失败
设置窗口是否可调整大小(set_window_resizable)
v2.2 开始支持。
int32_t set_window_resizable(uint32_t window_id, int32_t resizable);
- 参数:
window_id、resizable(1= 可调整,0= 不可) - 返回值:
1= 成功,0= 失败
启用或禁用窗口
禁用窗口时用户点不了上面控件(像模态对话框背后的灰窗);传非 0 恢复。
int32_t set_window_enabled(uint32_t window_id, int32_t enabled);
参数:
window_iduint32_t- 目标窗口 idenabledint32_t- 非0启用,0禁用
外观与样式
运行时修改窗口边框样式
动态修改窗口的边框样式,无需重新创建窗口。
int32_t set_window_frame_style(uint32_t window_id, const char* frame_style);
参数:
window_iduint32_t- 目标窗口 idframe_stylestring- 边框样式字符串,可选值:normal(有边框+标题栏)、no-titlebar(有边框+无标题栏)、borderless(无边框+无标题栏)、title-overlay(有边框+无标题栏+内置标题栏按钮)
自定义标题栏覆盖层样式(Windows 专属)
自定义 title-overlay 样式窗口的标题栏按钮覆盖层外观。
int32_t set_titlebar_overlay_style(
uint32_t window_id,
int32_t height,
const char* icon_color_hex,
const char* hover_bg_hex
);
参数:
window_iduint32_t- 目标窗口 idheightint32_t- 按钮高度(像素),传0或负数使用默认值 32。按钮宽度固定 45 像素icon_color_hexstring(可选) - 图标颜色,格式为#RRGGBB(如"#FFFFFF"),传NULL使用默认颜色hover_bg_hexstring(可选) - 非关闭按钮悬浮背景色,格式为#RRGGBB或#RRGGBBAA(支持透明度,如"#00000080"),传NULL使用默认深灰色
关闭按钮悬浮背景色固定为红色(#E81123),图标固定为白色,不受此 API 影响。
设置窗口明暗主题
控制窗口和 WebView 使用浅色、深色还是跟随系统主题。
更细的说明见 主题管理。
int32_t set_window_theme(uint32_t window_id, const char* theme);
参数:
window_iduint32_t- 目标窗口 idthemestring- 主题字符串,可选值:Light、Dark、System
获取当前窗口主题
查询当前窗口使用的主题。
int32_t get_window_theme(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
设置窗口背景材质
Windows 11 下设置云母、亚克力等系统背景材质。
可用字符串见 主题管理。
int32_t set_window_backdrop(uint32_t window_id, const char* backdrop_type);
参数:
window_iduint32_t- 目标窗口 idbackdrop_typestring- 背景材质类型
设置窗口背景色
设置窗口背景色(十六进制字符串)。
int32_t set_window_background_color(uint32_t window_id, const char* background_color_hex);
参数:
window_iduint32_t- 目标窗口 idbackground_color_hexstring- 背景色十六进制字符串,如#FF0000
请求重绘
通知系统重画客户区(一般很少需要手动调用)。
int32_t request_redraw(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
任务栏特效
设置任务栏进度条(set_window_progress)
v2.2 开始支持。
在任务栏按钮上显示进度条(如下载进度、安装进度等)。
int32_t set_window_progress(uint32_t window_id, int progress, int state);
- 参数:
window_iduint32_tprogressint- 进度值(0–100)stateint- 状态:0=无进度,1=正常,2=暂停(黄色),3=错误(红色),4=不确定
- 返回值:
1= 成功,0= 失败
仅 Windows 平台。
任务栏图标闪烁(flash_window)
v2.2 开始支持。
闪烁任务栏图标以吸引用户注意(如收到消息时)。
int32_t flash_window(uint32_t window_id, uint32_t count);
- 参数:
window_iduint32_t;countuint32_t- 闪烁次数,0= 停止闪烁 - 返回值:
1= 成功,0= 失败
仅 Windows 平台。
关闭与计数
关闭窗口
发起关闭;若页面注册了 beforeunload 且用户选择留下,关闭可能被推迟或取消,具体以 WebView 与页面脚本为准。
int32_t close_window(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
获取窗口数量
查询当前 JadeView 里还有几个窗口没关。
uint32_t get_window_count(void);