窗口 API
窗口 API 提供了创建和管理 WebView 窗口的所有功能,包括创建窗口、导航、调整大小、设置主题等。
以下函数都针对某个 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);不设置(
返回值:
> 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
导航与脚本
导航到 URL
让指定窗口里的网页打开另一个地址(http、file、自定义协议等)。
int32_t navigate_to_url(uint32_t window_id, const char* url);
参数:
window_iduint32_t- 目标窗口 idurlstring- 要导航到的地址
刷新页面
重新加载当前页,和用户按 F5 类似。
int32_t reload_webview_window(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
执行 JavaScript
往页面里注入并执行一段 JavaScript。
若需要执行结果,通过事件 javascript-result 等取回(见 事件类型)。
返回值只表示「请求有没有提交成功」,不是 JS 的返回值。
int32_t execute_javascript(uint32_t window_id, const char* script);
参数:
window_iduint32_t- 目标窗口 idscriptstring- 要执行的 JavaScript 代码
设置网页缩放
整页缩放,例如 1.0 为 100%,1.5 为 150%。
int32_t set_webview_zoom(uint32_t window_id, double level);
参数:
window_iduint32_t- 目标窗口 idleveldouble- 缩放比例
标题、位置、大小、显示
设置窗口标题
改变窗口标题栏上显示的文字(和 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 坐标
显示或隐藏窗口
显示或隐藏窗口(最小化以外的显隐)。
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取消置顶
请求重绘
通知系统重画客户区(一般很少需要手动调用)。
int32_t request_redraw(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
最大化、全屏、是否可点
最小化窗口
把窗口收到任务栏。
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退出全屏
启用或禁用窗口
禁用窗口时用户点不了上面控件(像模态对话框背后的灰窗);传非 0 恢复。
int32_t set_window_enabled(uint32_t window_id, int32_t enabled);
参数:
window_iduint32_t- 目标窗口 idenabledint32_t- 非0启用,0禁用
主题、背景、防录屏
设置窗口明暗主题
控制窗口和 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 set_content_protection(uint32_t window_id, int32_t content_protection);
参数:
window_iduint32_t- 目标窗口 idcontent_protectionint32_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或负数使用默认值 32icon_color_hexstring(可选) - 图标颜色,格式为#RRGGBB(如"#FFFFFF"),传NULL使用默认颜色hover_bg_hexstring(可选) - 非关闭按钮悬浮背景色,格式为#RRGGBB或#RRGGBBAA(支持透明度,如"#00000080"),传NULL使用默认深灰色
关闭按钮悬浮背景色固定为红色(#E81123),图标固定为白色,不受此 API 影响。
打印
打印 WebView 内容
打开 Windows 标准打印对话框,打印当前 WebView 内容。
int32_t jade_print(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
返回值:
1- 打印对话框已打开0- 失败(窗口不存在或不支持打印)
此功能仅 Windows 平台支持。
关闭窗口
发起关闭;若页面注册了 beforeunload 且用户选择留下,关闭可能被推迟或取消,具体以 WebView 与页面脚本为准。
int32_t close_window(uint32_t window_id);
参数:
window_iduint32_t- 目标窗口 id
获取窗口数量
查询当前 JadeView 里还有几个窗口没关。
uint32_t get_window_count(void);