API 参考
Miniblink VIP 版本 API 列表
Miniblink API 参考
本文档列出了 Miniblink VIP 版本的主要 API。这些接口与 WKE 官方接口保持兼容,您可以参考官方文档获取更多信息。本文档中会对特殊说明的接口进行额外标注。
基础函数
wkeVersion
获取当前 API 版本号。
unsigned int wkeVersion();
参数:无
返回值:
unsigned int
:当前 API 版本号
示例:
unsigned int version = wkeVersion();
printf("当前 Miniblink 版本:%u\n", version);
wkeSetWkeDllPath
设置 Miniblink DLL 的完整路径。
void wkeSetWkeDllPath(const wchar_t* dllPath);
参数:
dllPath
:DLL 文件的完整路径(包含文件名)
说明:
- 必须在初始化 Miniblink 之前调用
- 路径必须使用完整路径,不支持相对路径
- 建议使用
wchar_t
类型以支持 Unicode 路径
示例:
wkeSetWkeDllPath(L"C:\\Program Files\\Miniblink\\node.dll");
wkeFireMouseEvent
向 Miniblink 发送鼠标事件。
bool wkeFireMouseEvent(wkeWebView webView, unsigned int message, int x, int y, unsigned int flags);
参数:
webView
:WebView 句柄message
:Windows 鼠标消息(如WM_MOUSELEAVE
)x
:鼠标 X 坐标y
:鼠标 Y 坐标flags
:鼠标按键状态标志
标志值:
标志 | 说明 |
---|---|
WKE_CONTROL | Ctrl 键按下 |
WKE_SHIFT | Shift 键按下 |
WKE_LBUTTON | 左键按下 |
WKE_MBUTTON | 中键按下 |
WKE_RBUTTON | 右键按下 |
返回值:
bool
:事件是否成功发送
示例:
// 模拟鼠标左键点击
wkeFireMouseEvent(webView, WM_LBUTTONDOWN, 100, 100, WKE_LBUTTON);
wkeFireMouseEvent(webView, WM_LBUTTONUP, 100, 100, 0);
内存管理
wkeGC
执行 Miniblink 的垃圾回收操作。
void wkeGC(wkeWebView webView, long delayMs);
参数:
webView
:WebView 句柄delayMs
:延迟执行时间(毫秒)
说明:
- 延迟指定时间后执行垃圾回收
- 建议在内存压力大时调用
文件系统
wkeSetFileSystem
设置文件系统相关的钩子函数。
void wkeSetFileSystem(
WKE_FILE_OPEN pfnOpen,
WKE_FILE_CLOSE pfnClose,
WKE_FILE_SIZE pfnSize,
WKE_FILE_READ pfnRead,
WKE_FILE_SEEK pfnSeek
);
参数:
pfnOpen
:文件打开回调pfnClose
:文件关闭回调pfnSize
:获取文件大小回调pfnRead
:文件读取回调pfnSeek
:文件定位回调
说明: ⚠️ 此接口已被废弃,建议使用新的文件系统接口
页面状态
wkeIsLoaded
⚠️ 已废弃
检查 WebView 的加载状态。
bool wkeIsLoaded(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否加载完成
wkeIsLoadingSucceeded
⚠️ 已废弃
检查页面是否加载成功。
bool wkeIsLoadingSucceeded(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否加载成功
wkeIsLoadFailed
⚠️ 已废弃
检查页面是否加载失败。
bool wkeIsLoadFailed(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否加载失败
wkeIsLoadComplete
⚠️ 已废弃
检查页面是否完全加载完成。
bool wkeIsLoadComplete(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否加载完成
说明:
- 等效于
wkeIsLoadFailed
或wkeIsLoadingSucceeded
返回 true
wkeIsDocumentReady
检查 DOM 文档是否加载完成。
bool wkeIsDocumentReady(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:DOM 文档是否准备就绪
说明:
- 此函数检查 DOM 文档结构的加载状态
- 与网络加载状态检查函数不同,专注于文档结构
页面控制
wkeStopLoading
停止页面加载。
void wkeStopLoading(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeReload
重新加载当前页面。
bool wkeReload(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:重新加载是否成功
wkeWake
唤醒 WebView。
void wkeWake(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeIsAwake
检查 WebView 是否处于唤醒状态。
bool wkeIsAwake(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否唤醒
注意:
- ⚠️ 此功能尚未实现
页面信息
wkeGetTitle
获取页面标题(UTF-8编码)。
const utf8* wkeGetTitle(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
const utf8*
:页面标题字符串
wkeGetTitleW
获取页面标题(宽字符版本)。
const wchar_t* wkeGetTitleW(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
const wchar_t*
:页面标题宽字符串
页面布局
wkeResize
调整 WebView 的大小。
void wkeResize(wkeWebView webView, int w, int h);
参数:
webView
:WebView 句柄w
:新的宽度h
:新的高度
说明:
- 如果 WebView 是窗口模式,会同时调整窗口大小
- 调用后会触发页面重新布局
页面尺寸
wkeGetWidth
获取页面宽度。
int wkeGetWidth(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
int
:页面宽度(像素)
wkeGetHeight
获取页面高度。
int wkeGetHeight(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
int
:页面高度(像素)
wkeGetContentWidth
获取网页内容排版宽度。
int wkeGetContentWidth(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
int
:内容宽度(像素)
wkeGetContentHeight
获取网页内容排版高度。
int wkeGetContentHeight(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
int
:内容高度(像素)
页面渲染
wkeSetDirty
⚠️ 已废弃
设置页面为脏状态,触发下一帧重绘。
void wkeSetDirty(wkeWebView webView, bool dirty);
参数:
webView
:WebView 句柄dirty
:是否设为脏状态
wkeIsDirty
⚠️ 已废弃
获取页面脏状态。
bool wkeIsDirty(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否为脏状态
wkeAddDirtyArea
⚠️ 已废弃
添加页面脏矩形区域。
void wkeAddDirtyArea(wkeWebView webView, int x, int y, int w, int h);
参数:
webView
:WebView 句柄x
:左上角 X 坐标y
:左上角 Y 坐标w
:宽度h
:高度
wkeLayoutIfNeeded
⚠️ 已废弃
强制页面重新排版。
void wkeLayoutIfNeeded(wkeWebView webView);
参数:
webView
:WebView 句柄
wkePaint2
高级绘制接口。
void wkePaint2(wkeWebView webView, void* bits, int bufWid, int bufHei,
int xDst, int yDst, int w, int h, int xSrc, int ySrc, bool bCopyAlpha);
参数:
webView
:WebView 句柄bits
:外部缓冲区指针(大小为bufWid * bufHei * 4
字节)bufWid
:缓冲区宽度bufHei
:缓冲区高度xDst
:目标 X 坐标yDst
:目标 Y 坐标w
:绘制宽度h
:绘制高度xSrc
:源 X 坐标ySrc
:源 Y 坐标bCopyAlpha
:是否复制 Alpha 通道
说明:
- 主要用于 3D 游戏场景
- 频繁使用可能影响性能
- 建议使用
wkeGetViewDC
获取 DC 后进行操作
wkePaint
简化版像素获取接口。
void wkePaint(wkeWebView webView, void* bits, int pitch);
参数:
webView
:WebView 句柄bits
:外部缓冲区指针(大小为宽度 * 高度 * 4
字节)pitch
:行间距(通常设为 0)
wkeRepaintIfNeeded
⚠️ 已废弃
强制重绘页面。
void wkeRepaintIfNeeded(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeGetViewDC
获取 WebView 的设备上下文。
HDC wkeGetViewDC(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
HDC
:设备上下文句柄
wkeGetHostHWND
获取 WebView 对应的窗口句柄。
HWND wkeGetHostHWND(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
HWND
:窗口句柄
说明:
- 功能与
wkeGetWindowHandle
相同
导航控制
wkeCanGoBack
检查页面是否可以后退。
bool wkeCanGoBack(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否可以后退
wkeGoBack
执行页面后退操作。
bool wkeGoBack(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:后退操作是否成功
wkeCanGoForward
检查页面是否可以前进。
bool wkeCanGoForward(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:是否可以前进
wkeGoForward
执行页面前进操作。
bool wkeGoForward(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:前进操作是否成功
编辑操作
wkeEditorSelectAll
执行全选操作。
void wkeEditorSelectAll(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorUnSelect
取消选择。
void wkeEditorUnSelect(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorCopy
复制选中内容。
void wkeEditorCopy(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorCut
剪切选中内容。
void wkeEditorCut(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorDelete
删除选中内容。
void wkeEditorDelete(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorUndo
撤销操作。
void wkeEditorUndo(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeEditorRedo
重做操作。
void wkeEditorRedo(wkeWebView webView);
参数:
webView
:WebView 句柄
Cookie 管理
wkeGetCookieW
获取页面 Cookie(宽字符版本)。
const wchar_t * wkeGetCookieW(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeGetCookie
获取页面 Cookie。
const utf8* wkeGetCookie(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
const utf8*
:Cookie 字符串
wkeSetCookie
设置页面 Cookie。
void wkeSetCookie(wkeWebView webView, const utf8* url, const utf8* cookie);
参数:
webView
:WebView 句柄url
:目标 URLcookie
:Cookie 字符串
示例:
const char* cookie = "PERSONALIZE=123;expires=Monday, 13-Jun-2022 03:04:55 GMT; domain=.fidelity.com; path=/; secure";
wkeSetCookie(webView, "https://example.com", cookie);
wkeVisitAllCookie
通过访问器遍历所有 Cookie。
void wkeVisitAllCookie(void* params, wkeCookieVisitor visitor);
参数:
params
:用户自定义参数visitor
:Cookie 访问器回调函数
wkePerformCookieCommand
执行 Cookie 相关命令。
void wkePerformCookieCommand(wkeCookieCommand command);
参数:
command
:Cookie 操作命令
命令类型:
命令 | 说明 | CURL 对应操作 |
---|---|---|
wkeCookieCommandClearAllCookies | 清除所有 Cookie | CURLOPT_COOKIELIST, "ALL" |
wkeCookieCommandClearSessionCookies | 清除会话 Cookie | CURLOPT_COOKIELIST, "SESS" |
wkeCookieCommandFlushCookiesToFile | 保存 Cookie 到文件 | CURLOPT_COOKIELIST, "FLUSH" |
wkeCookieCommandReloadCookiesFromFile | 从文件加载 Cookie | CURLOPT_COOKIELIST, "RELOAD" |
注意:
- 此接口仅影响 CURL 设置,不会修改 JavaScript 中的内容
wkeClearCookie
清理所有页面的 Cookie。
void wkeClearCookie(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeSetCookieEnabled
启用或禁用 Cookie。
void wkeSetCookieEnabled(wkeWebView webView, bool enable);
参数:
webView
:WebView 句柄enable
:是否启用 Cookie
注意:
- 仅影响 Blink 引擎,不影响 CURL Cookie 文件的生成
wkeIsCookieEnabled
检查 Cookie 是否启用。
bool wkeIsCookieEnabled(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
bool
:Cookie 是否启用
wkeSetCookieJarPath
设置 Cookie 存储目录。
void wkeSetCookieJarPath(wkeWebView webView, const WCHAR* path);
参数:
webView
:WebView 句柄path
:Cookie 存储目录路径
说明:
- 默认在当前目录下的 "cookie.dat" 文件中
wkeSetCookieJarFullPath
设置 Cookie 文件的完整路径。
void wkeSetCookieJarFullPath(wkeWebView webView, const WCHAR* path);
参数:
webView
:WebView 句柄path
:Cookie 文件的完整路径(如 "c:\mb\cookie.dat")
存储管理
wkeSetLocalStorageFullPath
设置 Local Storage 存储路径。
void wkeSetLocalStorageFullPath(wkeWebView webView, const WCHAR* path);
参数:
webView
:WebView 句柄path
:存储目录路径(如 "c:\mb\LocalStorage")
注意:
- 只能设置目录路径,不能设置文件路径
媒体控制
wkeSetMediaVolume
设置媒体音量。
void wkeSetMediaVolume(wkeWebView webView, float volume);
参数:
webView
:WebView 句柄volume
:音量值
注意:
- ⚠️ 此功能尚未实现
wkeGetMediaVolume
获取媒体音量。
float wkeGetMediaVolume(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
float
:音量值
注意:
- ⚠️ 此功能尚未实现
事件处理
wkeFireMouseEvent
发送鼠标事件。
bool wkeFireMouseEvent(wkeWebView webView, unsigned int message, int x, int y, unsigned int flags);
参数:
webView
:WebView 句柄message
:Windows 鼠标消息(如WM_MOUSELEAVE
)x
:鼠标 X 坐标y
:鼠标 Y 坐标flags
:按键状态标志
标志值:
标志 | 说明 |
---|---|
WKE_CONTROL | Ctrl 键按下 |
WKE_SHIFT | Shift 键按下 |
WKE_LBUTTON | 左键按下 |
WKE_MBUTTON | 中键按下 |
WKE_RBUTTON | 右键按下 |
wkeFireContextMenuEvent
发送上下文菜单事件。
bool wkeFireContextMenuEvent(wkeWebView webView, int x, int y, unsigned int flags);
参数:
webView
:WebView 句柄x
:菜单 X 坐标y
:菜单 Y 坐标flags
:标志位
注意:
- ⚠️ 此功能尚未实现
wkeFireMouseWheelEvent
发送鼠标滚轮事件。
bool wkeFireMouseWheelEvent(wkeWebView webView, int x, int y, int delta, unsigned int flags);
参数:
webView
:WebView 句柄x
:鼠标 X 坐标y
:鼠标 Y 坐标delta
:滚轮增量flags
:按键状态标志
wkeFireKeyUpEvent
发送按键释放事件。
bool wkeFireKeyUpEvent(wkeWebView webView, unsigned int virtualKeyCode, unsigned int flags, bool systemKey);
参数:
webView
:WebView 句柄virtualKeyCode
:虚拟键码(参考 Virtual-Key Codes)flags
:标志位(WKE_REPEAT
、WKE_EXTENDED
)systemKey
:是否为系统按键
wkeFireKeyDownEvent
发送按键按下事件。
bool wkeFireKeyDownEvent(wkeWebView webView, unsigned int virtualKeyCode, unsigned int flags, bool systemKey);
参数:
与 wkeFireKeyUpEvent
相同
wkeFireKeyPressEvent
发送按键输入事件。
bool wkeFireKeyPressEvent(wkeWebView webView, unsigned int charCode, unsigned int flags, bool systemKey);
参数:
webView
:WebView 句柄charCode
:字符码(参考 WM_CHAR)flags
:标志位systemKey
:是否为系统按键
wkeFireWindowsMessage
发送 Windows 消息。
bool wkeFireWindowsMessage(wkeWebView webView, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* result);
参数:
webView
:WebView 句柄hWnd
:窗口句柄message
:消息类型wParam
:消息参数lParam
:消息参数result
:处理结果
说明:
- 主要用于处理光标相关事件
- 在无窗口模式下需要手动发送光标消息
焦点控制
wkeSetFocus
设置 WebView 焦点。
void wkeSetFocus(wkeWebView webView);
参数:
webView
:WebView 句柄
说明:
- 如果 WebView 关联了窗口,窗口也会获得焦点
wkeKillFocus
移除 WebView 焦点。
void wkeKillFocus(wkeWebView webView);
参数:
webView
:WebView 句柄
wkeGetCaretRect
获取编辑框光标位置。
wkeRect wkeGetCaretRect(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
wkeRect
:光标矩形区域
JavaScript 交互
wkeRunJS
执行 JavaScript 代码(UTF-8)。
jsValue wkeRunJS(wkeWebView webView, const utf8* script);
参数:
webView
:WebView 句柄script
:JavaScript 代码
返回值:
jsValue
:JavaScript 执行结果
说明:
- 代码在闭包中执行
- 返回值需要通过 jsXXX 相关接口获取具体类型信息
wkeRunJSW
执行 JavaScript 代码(宽字符版本)。
jsValue wkeRunJSW(wkeWebView webView, const wchar_t* script);
参数:
webView
:WebView 句柄script
:JavaScript 代码
返回值:
jsValue
:JavaScript 执行结果
wkeGlobalExec
获取页面主框架的 JavaScript 执行状态。
jsExecState wkeGlobalExec(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
jsExecState
:JavaScript 执行状态
wkeSleep
暂停 WebView。
void wkeSleep(wkeWebView webView);
参数:
webView
:WebView 句柄
注意:
- ⚠️ 此功能尚未实现
注意事项
- 确保在使用 API 前正确初始化 Miniblink
- 部分 API 可能在不同版本中有差异,请参考版本说明
- 建议在使用前测试 API 的兼容性
- 注意已废弃 API 的替代方案
提示:本文档会持续更新,如果您发现任何问题或有改进建议,请通过反馈页面联系我们。
缩放控制
wkeSetZoomFactor
设置页面缩放系数。
void wkeSetZoomFactor(wkeWebView webView, float factor);
参数:
webView
:WebView 句柄factor
:缩放系数(默认值为 1.0)
wkeGetZoomFactor
获取页面缩放系数。
float wkeGetZoomFactor(wkeWebView webView);
参数:
webView
:WebView 句柄
返回值:
float
:当前缩放系数
wkeSetEditable
设置页面是否可编辑。
void wkeSetEditable(wkeWebView webView, bool editable);
参数:
webView
:WebView 句柄editable
:是否可编辑
注意:
- ⚠️ 此功能尚未实现
事件回调
wkeOnTitleChanged
设置标题变化通知回调。
void wkeOnTitleChanged(wkeWebView webView, wkeTitleChangedCallback callback, void* callbackParam);
回调函数签名:
typedef void(*wkeTitleChangedCallback)(wkeWebView webView, void* param, const wkeString title);
参数:
webView
:WebView 句柄callback
:回调函数callbackParam
:回调函数用户参数
wkeOnMouseOverUrlChanged
设置鼠标悬停链接变化回调。
void wkeOnMouseOverUrlChanged(wkeWebView webView, wkeTitleChangedCallback callback, void* callbackParam);
说明:
- 当鼠标悬停在链接元素上时触发
- 回调函数会收到链接的 URL
wkeOnURLChanged
设置 URL 变化回调(基础版本)。
void wkeOnURLChanged(wkeWebView webView, wkeURLChangedCallback callback, void* callbackParam);
wkeOnURLChanged2
设置 URL 变化回调(扩展版本)。
void wkeOnURLChanged2(wkeWebView webView, wkeURLChangedCallback2 callback, void* callbackParam);
回调函数签名:
typedef void(*wkeURLChangedCallback2)(wkeWebView webView, void* param, wkeWebFrameHandle frameId, const wkeString url);
说明:
- 相比基础版本多了
frameId
参数 - 可用于判断是否是主框架的 URL 变化
wkeOnPaintUpdated
设置页面重绘更新回调。
void wkeOnPaintUpdated(wkeWebView webView, wkePaintUpdatedCallback callback, void* callbackParam);
回调函数签名:
typedef void(*wkePaintUpdatedCallback)(wkeWebView webView, void* param, const HDC hdc, int x, int y, int cx, int cy);
参数说明:
x, y
:更新区域左上角坐标cx, cy
:更新区域宽度和高度
wkeOnPaintBitUpdated
设置位图更新回调。
void wkeOnPaintBitUpdated(wkeWebView webView, wkePaintBitUpdatedCallback callback, void* callbackParam);
说明:
- 适用于游戏中的离屏渲染
- 回调提供像素缓冲区而不是 DC
对话框回调
wkeOnAlertBox
设置 JavaScript alert 对话框回调。
void wkeOnAlertBox(wkeWebView webView, wkeAlertBoxCallback callback, void* callbackParam);
wkeOnConfirmBox
设置 JavaScript confirm 对话框回调。
void wkeOnConfirmBox(wkeWebView webView, wkeConfirmBoxCallback callback, void* callbackParam);
wkeOnPromptBox
设置 JavaScript prompt 对话框回调。
void wkeOnPromptBox(wkeWebView webView, wkePromptBoxCallback callback, void* callbackParam);
导航回调
wkeOnNavigation
设置导航事件回调。
void wkeOnNavigation(wkeWebView webView, wkeNavigationCallback callback, void* param);
回调函数签名:
typedef bool(*wkeNavigationCallback)(wkeWebView webView, void* param, wkeNavigationType navigationType, const wkeString url);
导航类型:
类型 | 说明 |
---|---|
WKE_NAVIGATION_TYPE_LINKCLICK | 点击链接触发 |
WKE_NAVIGATION_TYPE_FORMSUBMITTE | 表单提交触发 |
WKE_NAVIGATION_TYPE_BACKFORWARD | 前进后退触发 |
WKE_NAVIGATION_TYPE_RELOAD | 重新加载触发 |
返回值说明:
true
:允许导航false
:阻止导航
wkeOnCreateView
设置新窗口创建回调。
void wkeOnCreateView(wkeWebView webView, wkeCreateViewCallback callback, void* param);
回调函数签名:
typedef wkeWebView(*wkeCreateViewCallback)(wkeWebView webView, void* param, wkeNavigationType navigationType, const wkeString url, const wkeWindowFeatures* windowFeatures);
文档事件
wkeOnDocumentReady
设置文档加载完成回调(基础版本)。
void wkeOnDocumentReady(wkeWebView webView, wkeDocumentReadyCallback callback, void* param);
说明:
- 对应 JavaScript 的
body onload
事件
wkeOnDocumentReady2
设置文档加载完成回调(扩展版本)。
void wkeOnDocumentReady2(wkeWebView webView, wkeDocumentReady2Callback callback, void* param);
说明:
- 相比基础版本多了
frameId
参数 - 可用于判断是否是主框架的加载完成事件
网络事件
wkeOnDownload
设置下载事件回调。
void wkeOnDownload(wkeWebView webView, wkeDownloadCallback callback, void* param);
wkeNetOnResponse
设置网络响应回调。
void wkeNetOnResponse(wkeWebView webView, wkeNetResponseCallback callback, void* param);
wkeOnConsole
设置控制台输出回调。
void wkeOnConsole(wkeWebView webView, wkeConsoleCallback callback, void* param);
wkeSetUIThreadCallback
设置 UI 线程回调。
void wkeSetUIThreadCallback(wkeWebView webView, wkeCallUiThread callback, void* param);
注意:
- ⚠️ 此功能尚未实现
wkeOnLoadUrlBegin
设置网络请求开始回调。
void wkeOnLoadUrlBegin(wkeWebView webView, wkeLoadUrlBeginCallback callback, void* callbackParam);
回调函数签名:
typedef bool(*wkeLoadUrlBeginCallback)(wkeWebView webView, void* param, const char *url, void *job);
重要说明:
- 设置
wkeNetHookRequest
后会触发wkeOnLoadUrlEnd
回调 - 返回
true
表示拦截请求,false
表示继续请求
示例:
// 替换特定 URL 的内容
bool handleLoadUrlBegin(wkeWebView webView, void* param, const char* url, void* job) {
if (strstr(url, "http://example.com/target.js")) {
wkeNetSetMIMEType(job, "text/javascript");
const char* newContent = "console.log('Modified content');";
wkeNetSetData(job, newContent, strlen(newContent));
return true;
}
return false;
}
// 修改网络响应
bool handleLoadUrlBegin(wkeWebView webView, void* param, const char* url, void* job) {
if (strstr(url, "http://example.com/api")) {
wkeNetHookRequest(job);
return false;
}
return false;
}
wkeOnLoadUrlEnd
设置网络请求结束回调。
void wkeOnLoadUrlEnd(wkeWebView webView, wkeLoadUrlEndCallback callback, void* callbackParam);
说明:
- 需要在
wkeOnLoadUrlBegin
中设置wkeNetHookRequest
才会触发
脚本上下文
wkeOnDidCreateScriptContext
设置脚本上下文创建回调。
void wkeOnDidCreateScriptContext(wkeWebView webView, wkeDidCreateScriptContextCallback callback, void* callbackParam);
说明:
- 每个框架创建时都会触发此回调
wkeOnWillReleaseScriptContext
设置脚本上下文释放回调。
void wkeOnWillReleaseScriptContext(wkeWebView webView, wkeWillReleaseScriptContextCallback callback, void* callbackParam);
多媒体
wkeOnWillMediaLoad
设置多媒体加载回调。
void wkeOnWillMediaLoad(wkeWebView webView, wkeWillMediaLoadCallback callback, void* callbackParam);
说明:
- 在创建 video 等多媒体标签时触发
框架操作
wkeIsMainFrame
判断是否是主框架。
bool wkeIsMainFrame(wkeWebView webView, wkeWebFrameHandle frameId);
参数:
webView
:WebView 句柄frameId
:框架 ID
返回值:
bool
:是否是主框架
Frame 操作相关API
wkeWebFrameGetMainFrame
wkeWebFrameHandle wkeWebFrameGetMainFrame(wkeWebView webView)
获取主frame的句柄。
wkeRunJsByFrame
jsValue wkeRunJsByFrame(wkeWebView webView, wkeWebFrameHandle frameId, const utf8* script, bool isInClosure)
在指定的frame上运行JavaScript代码。
参数说明:
isInClosure
: 表示是否在外层包装function() 形式的闭包
注意: 如果需要返回值,在isInClosure为true时,需要写return,为false则不用
wkeGetFrameUrl
const utf8* wkeGetFrameUrl(wkeWebView webView, wkeWebFrameHandle frameId)
获取frame对应的URL。
字符串处理API
wkeString相关操作
wkeGetString
const utf8* wkeGetString(const wkeString s)
获取wkeString结构体对应的字符串,使用UTF-8编码。
wkeGetStringW
const wchar_t* wkeGetStringW(const wkeString string)
获取wkeString结构体对应的字符串,使用UTF-16编码。
wkeSetString
void wkeSetString(wkeString string, const utf8* str, size_t len)
设置wkeString结构体对应的字符串,使用UTF-8编码。
wkeSetStringW
void wkeSetStringW(wkeString string, const wchar_t* str, size_t len)
设置wkeString结构体对应的字符串,使用UTF-16编码。
wkeCreateStringW
wkeString wkeCreateStringW(const wchar_t* str, size_t len)
通过UTF-16编码的字符串创建一个wkeString。
wkeDeleteString
void wkeDeleteString(wkeString str)
析构wkeString对象。
用户数据存储API
wkeSetUserKeyValue
void wkeSetUserKeyValue(wkeWebView webView, const char* key, void* value)
对webView设置一个key-value键值对,可用于保存用户自定义的任何指针。
wkeGetUserKeyValue
void* wkeGetUserKeyValue(wkeWebView webView, const char* key)
获取之前设置的用户键值对。
窗口管理API
基础窗口操作
wkeCreateWebView
wkeWebView wkeCreateWebView()
创建一个webview,但不创建真实窗口。通常用于离屏渲染场景,如游戏中。
wkeDestroyWebView
void wkeDestroyWebView(wkeWebView webView)
销毁webview,效果同wkeDestroyWebWindow。
窗口创建与销毁
wkeCreateWebWindow
wkeWebView wkeCreateWebWindow(wkeWindowType type, HWND parent, int x, int y, int width, int height)
创建一个带真实窗口的wkeWebView。
窗口类型(wkeWindowType):
WKE_WINDOW_TYPE_POPUP
: 普通窗口WKE_WINDOW_TYPE_TRANSPARENT
: 透明窗口(通过layer window实现)WKE_WINDOW_TYPE_CONTROL
: 嵌入在父窗口里的子窗口(需要设置parent)
wkeDestroyWebWindow
void wkeDestroyWebWindow(wkeWebView webWindow)
销毁wkeWebView对应的所有数据结构,包括真实窗口。
窗口事件处理
wkeOnWindowClosing
void wkeOnWindowClosing(wkeWebView webWindow, wkeWindowClosingCallback callback, void* param)
当真实窗口模式下收到WM_CLOSE消息时触发此回调。可通过在回调中返回false来拒绝关闭窗口。
wkeOnWindowDestroy
void wkeOnWindowDestroy(wkeWebView webWindow, wkeWindowDestroyCallback callback, void* param)
窗口即将被销毁时触发回调。此操作无法取消。
窗口控制API
wkeShowWindow
void wkeShowWindow(wkeWebView webWindow, bool showFlag)
显示或隐藏窗口。
wkeEnableWindow
void wkeEnableWindow(wkeWebView webWindow, bool enableFlag)
启用或禁用窗口。
wkeMoveWindow
void wkeMoveWindow(wkeWebView webWindow, int x, int y, int width, int height)
移动和调整窗口大小。
wkeMoveToCenter
void wkeMoveToCenter(wkeWebView webWindow)
使窗口在父窗口或屏幕中居中显示。
wkeResizeWindow
void wkeResizeWindow(wkeWebView webWindow, int width, int height)
调整窗口大小,效果同wkeResize。
wkeSetWindowTitle
void wkeSetWindowTitle(wkeWebView webWindow, const utf8* title)
void wkeSetWindowTitle(wkeWebView webWindow, const wchar_t* title)
设置窗口标题,支持UTF-8和宽字符版本。
初始化与配置API
核心初始化
wkeInit / wkeInitialize
void wkeInit()
void wkeInitialize()
初始化整个mb环境。这些函数必须在所有mb API调用之前最先调用。所有mb API必须与调用wkeInit的线程为同一线程。
wkeShutdown / wkeFinalize
void wkeShutdown()
void wkeFinalize()
(已废弃)关闭整个mb环境。调用后,所有mb API将不能再被调用。
wkeIsInitialize
bool wkeIsInitialize()
检查mb环境是否已初始化。
代理设置
wkeSetProxy
void wkeSetProxy(const wkeProxy* proxy)
设置全局代理配置。
wkeSetViewProxy
void wkeSetViewProxy(wkeWebView webView, wkeProxy* proxy)
为特定webview设置代理配置。
环境配置
wkeConfigure
void wkeConfigure(const wkeSettings* settings)
配置全局设置。
配置结构:
typedef struct {
wkeProxy proxy;
unsigned int mask;
} wkeSettings;
可用掩码:
WKE_SETTING_PROXY
: 设置代理,效果同wkeSetProxy
功能开关API
wkeSetMemoryCacheEnable
void wkeSetMemoryCacheEnable(wkeWebView webView, bool b)
启用/禁用内存缓存。启用时网页的图片等将缓存在内存中。
注意: 关闭后内存使用会降低,但可能引起问题。如不熟悉,建议保持启用。
wkeSetTouchEnabled
void wkeSetTouchEnabled(wkeWebView webView, bool b)
启用/禁用触屏模式。启用后,鼠标消息将自动转换为触屏消息。
wkeSetMouseEnabled
void wkeSetMouseEnabled(wkeWebView webView, bool b)
启用/禁用鼠标消息。可在启用触屏后关闭鼠标消息。
wkeSetNavigationToNewWindowEnable
void wkeSetNavigationToNewWindowEnable(wkeWebView webView, bool b)
控制新窗口打开行为。禁用后,点击链接将在当前窗口打开而不是新窗口。
设备模拟API
wkeSetDeviceParameter
void wkeSetDeviceParameter(wkeWebView webView, const char* device, const char* paramStr, int paramInt, float paramFloat)
(已废弃)设置mb模拟的硬件设备环境,主要用于手机设备模拟。
支持的设备参数:
device参数 | 说明 | 所需参数 |
---|---|---|
"navigator.maxTouchPoints" | 设置触控点数 | paramInt |
"navigator.platform" | 设置平台标识 | paramStr |
"navigator.hardwareConcurrency" | 设置CPU核心数 | paramInt |
"screen.width" | 设置屏幕宽度 | paramInt |
"screen.height" | 设置屏幕高度 | paramInt |
"screen.availWidth" | 设置可用屏幕宽度 | paramInt |
"screen.availHeight" | 设置可用屏幕高度 | paramInt |
"screen.pixelDepth" | 设置像素深度 | paramInt |
"window.devicePixelRatio" | 设置设备像素比 | paramFloat |
安全设置
wkeSetCspCheckEnable
void wkeSetCspCheckEnable(wkeWebView webView, bool b)
控制跨域安全策略检查。
说明:
- 关闭后,跨域检查将被禁止
- 可以执行任何跨域操作,如跨域ajax、跨域设置iframe
插件与性能控制
wkeSetNpapiPluginsEnabled
void wkeSetNpapiPluginsEnabled(wkeWebView webView, bool b)
启用或禁用NPAPI插件(如Flash)。
wkeSetHeadlessEnabled
void wkeSetHeadlessEnabled(wkeWebView webView, bool b)
启用无头模式。
说明:
- 开启后不会渲染页面,提升网页性能
- 适用于爬虫或自动化工具开发
调试与开发工具
wkeSetDebugConfig
void wkeSetDebugConfig(wkeWebView webView, const char* debugString, const char* param)
配置调试和实验性选项。
支持的调试选项:
debugString | 说明 | param说明 |
---|---|---|
"showDevTools" | 开启开发者工具 | 开发者工具资源路径(UTF-8),如file:///c:/miniblink-release/front_end/inspector.html |
"wakeMinInterval" | 设置帧率(值越大帧率越低) | 默认值:10 |
"drawMinInterval" | 设置帧率(值越大帧率越低) | 默认值:3 |
"antiAlias" | 设置抗锯齿渲染 | 必须为"1" |
"minimumFontSize" | 最小字体大小 | 字体大小值 |
"minimumLogicalFontSize" | 最小逻辑字体大小 | 字体大小值 |
"defaultFontSize" | 默认字体大小 | 字体大小值 |
"defaultFixedFontSize" | 默认等宽字体大小 | 字体大小值 |
窗口设置
wkeSetHandle
void wkeSetHandle(wkeWebView webView, HWND wnd)
设置webview对应的窗口句柄。
注意: 仅在无窗口模式下可用,wkeCreateWebWindow创建的webview已自带窗口句柄。
wkeSetHandleOffset
void wkeSetHandleOffset(wkeWebView webView, int x, int y)
设置无窗口模式下的绘制偏移。
说明:
- 主要用于离屏模式
- 当绘制位置不在真窗口(0, 0)处时需要调用
wkeSetViewSettings
void wkeSetViewSettings(wkeWebView webView, const wkeViewSettings* settings)
配置webview相关设置(目前仅支持背景颜色设置)。
wkeSetTransparent
void wkeSetTransparent(wkeWebView webView, bool transparent)
在无窗口模式下启用透明模式。
wkeIsTransparent
bool wkeIsTransparent(wkeWebView webView)
判断窗口是否为分层窗口(layer window)。
用户代理设置
wkeSetUserAgent
void wkeSetUserAgent(wkeWebView webView, const utf8* userAgent)
设置WebView的User-Agent。
wkeSetUserAgentW
void wkeSetUserAgentW(wkeWebView webView, const wchar_t* userAgent)
设置WebView的User-Agent(宽字符版本)。
wkeGetUserAgent
const utf8* wkeGetUserAgent(wkeWebView webView)
获取WebView的User-Agent。
页面加载
wkeLoadURL
void wkeLoadURL(wkeWebView webView, const utf8* url)
加载网络URL(如"http://qq.com/")。
wkeLoadW
void wkeLoadW(wkeWebView webView, const wchar_t* url)
加载URL(宽字符版本)。
wkeLoadHTML
void wkeLoadHTML(wkeWebView webView, const utf8* html)
加载HTML字符串。
注意: HTML中的相对路径相对于exe所在目录。
wkeLoadHtmlWithBaseUrl
void wkeLoadHtmlWithBaseUrl(wkeWebView webView, const utf8* html, const utf8* baseUrl)
加载HTML字符串,并指定baseURL。
wkeLoadFile
void wkeLoadFile(wkeWebView webView, const utf8* filename)
加载本地文件。
wkeGetURL
const utf8* wkeGetURL(wkeWebView webView)
获取主frame的URL。
网络请求控制
wkeNetSetHTTPHeaderField
void wkeNetSetHTTPHeaderField(void* jobPtr, wchar_t* key, wchar_t* value, bool response)
在wkeOnLoadUrlBegin
回调中设置HTTP请求头。
说明:
- 适用于HTTP和file协议
- response参数必须设置为false
wkeNetGetRawHttpHead
const wkeSlist* wkeNetGetRawHttpHead(wkeNetJob jobPtr)
在wkeOnLoadUrlBegin
回调中获取原始请求头。
返回值:
const wkeSlist*
:C语言链表结构,详见头文件
wkeNetSetMIMEType
void wkeNetSetMIMEType(void* jobPtr, char* type)
在wkeOnLoadUrlBegin
回调中设置MIME类型。
wkeNetGetMIMEType
const char* wkeNetGetMIMEType(void* jobPtr, wkeString mime)
获取MIME类型(mime参数可传nullptr)。
wkeNetSetData
void wkeNetSetData(void* jobPtr, void* buf, int len)
在wkeOnLoadUrlEnd
中设置hook后的缓存数据。
wkeNetCancelRequest
void wkeNetCancelRequest(void* jobPtr)
在wkeOnLoadUrlBegin
回调中取消请求。
wkeNetGetFavicon
int wkeNetGetFavicon(wkeWebView webView, wkeOnNetGetFavicon callback, void* param)
获取网站图标。
注意: 必须在
wkeOnLoadingFinish
回调中调用,可用以下代码判断主frame:
wkeTempCallbackInfo* temInfo = wkeGetTempCallbackInfo(webView);
if (::wkeIsMainFrame(webView, temInfo->frame)) {
::wkeNetGetFavicon(webView, HandleFaviconReceived, divaram);
}
wkeNetHoldJobToAsynCommit
BOOL wkeNetHoldJobToAsynCommit(void* jobPtr)
高级异步请求控制。
说明:
- 在
wkeOnLoadUrlBegin
中调用 - 用于无法立即判断结果的情况
- 可在之后调用
wkeNetContinueJob
继续请求 - 返回TRUE表示成功,FALSE表示调用失败
wkeNetGetRequestMethod
wkeRequestType wkeNetGetRequestMethod(void *jobPtr)
获取请求方法(如POST或GET)。
wkeNetGetPostBody
wkePostBodyElements* wkeNetGetPostBody(void *jobPtr)
获取POST请求数据(仅POST请求有效)。
Post数据处理
wkePostBodyElements* wkeNetCreatePostBodyElements(wkeWebView webView, size_t length)
void wkeNetFreePostBodyElements(wkePostBodyElements* elements)
wkePostBodyElement* wkeNetCreatePostBodyElement(wkeWebView webView)
void wkeNetFreePostBodyElement(wkePostBodyElement* element)
POST数据处理相关接口:
- 用于创建新的POST数据包
- 释放原有POST数据
- 在
wkeOnLoadUrlBegin
中使用
JavaScript参数处理
jsArgCount
int jsArgCount(jsExecState es)
获取JavaScript调用C++回调时的参数个数。
jsArgType
jsType jsArgType(jsExecState es, int argIdx)
获取指定索引参数的类型(索引从0开始)。
jsArg
jsValue jsArg(jsExecState es, int argIdx)
获取指定索引参数的值。
jsTypeOf
jsType jsTypeOf(jsValue v)
获取jsValue的类型。
类型判断函数
bool jsIsNumber(jsValue v)
bool jsIsString(jsValue v)
bool jsIsBoolean(jsValue v)
bool jsIsObject(jsValue v) // 非数字、字符串、undefined、null、函数时返回true
bool jsIsTrue(jsValue v) // 对象类型返回false
bool jsIsFalse(jsValue v) // 等价于!jsIsTrue(v)
值转换函数
int jsToInt(jsExecState es, jsValue v) // 非数值类型返回0
double jsToDouble(jsExecState es, jsValue v) // 非数值类型返回0.0
const wchar_t* jsToTempStringW(jsExecState es, jsValue v) // 非字符串返回L"",下一帧自动释放
const utf8* jsToTempString(jsExecState es, jsValue v) // 同上
const utf8* jsToString(jsExecState es, jsValue v) // 返回UTF-8编码
const wchar_t* jsToStringW(jsExecState es, jsValue v) // 返回宽字符
JavaScript值创建
jsInt
jsValue jsInt(int n)
创建一个整数类型的jsValue。
jsString
jsValue jsString(jsExecState es, const utf8* str)
创建一个UTF-8编码的字符串类型jsValue。
说明:
- 字符串内容会在内部被复制保存
jsArrayBuffer
jsValue jsArrayBuffer(jsExecState es, char* buffer, size_t size)
创建一个ArrayBuffer类型的jsValue,用于处理二进制数据。
jsGetArrayBuffer
wkeMemBuf* jsGetArrayBuffer(jsExecState es, jsValue value)
获取ArrayBuffer类型的数据内容。
jsEmptyObject
jsValue jsEmptyObject(jsExecState es)
创建一个空的JavaScript对象。
JavaScript代码执行
jsEvalW
jsValue jsEvalW(jsExecState es, const wchar_t* str)
执行JavaScript代码并返回结果。
注意:
- 代码会自动被包装在function()中,变量会被隔离
- 需要写return语句才能获取返回值
jsEvalExW
jsValue jsEvalExW(jsExecState es, const wchar_t* str, bool isInClosure)
扩展版本的JavaScript代码执行。
参数说明:
isInClosure
: 是否包装在function()中- 当isInClosure为true时需要写return才能获取返回值
JavaScript函数调用
jsCall
jsValue jsCall(jsExecState es, jsValue func, jsValue thisValue, jsValue* args, int argCount)
调用JavaScript函数。
参数说明:
func
: 要调用的函数(可以是从js获取或自行构造的)thisValue
: 成员函数的this值(普通函数可传jsUndefined)args
: 参数数组argCount
: 参数个数
jsCallGlobal
jsValue jsCallGlobal(jsExecState es, jsValue func, jsValue* args, int argCount)
调用window对象上的全局函数。
JavaScript对象操作
jsGet/jsSet
jsValue jsGet(jsExecState es, jsValue object, const char* prop)
void jsSet(jsExecState es, jsValue object, const char* prop, jsValue value)
获取/设置对象属性。
说明:
- 如果object不是js对象类型,jsGet将返回jsUndefined
jsGetGlobal/jsSetGlobal
jsValue jsGetGlobal(jsExecState es, const char* prop)
void jsSetGlobal(jsExecState es, const char* prop, jsValue v)
获取/设置window对象上的全局属性。
jsGetAt/jsSetAt
jsValue jsGetAt(jsExecState es, jsValue object, int index)
void jsSetAt(jsExecState es, jsValue object, int index, jsValue value)
获取/设置数组元素。
说明:
- object必须是JavaScript数组类型
- jsGetAt对非数组返回jsUndefined
jsGetKeys
jsKeys* jsGetKeys(jsExecState es, jsValue object)
获取对象的所有键名。
jsGetLength/jsSetLength
int jsGetLength(jsExecState es, jsValue object)
void jsSetLength(jsExecState es, jsValue object, int length)
获取/设置数组长度。
说明:
- object必须是JavaScript数组类型
环境操作
jsGetWebView
wkeWebView jsGetWebView(jsExecState es)
获取执行状态对应的WebView。
jsGC
void jsGC()
强制执行垃圾回收。
JavaScript函数绑定
jsBindFunction
void fastcall jsBindFunction(const char* name, jsNativeFunction fn, unsigned int argCount)
绑定全局函数到主frame的window对象。
重要说明:
- 仅能绑定到主frame
- 使用fastcall调用约定
- 必须在webview创建前调用
- 与wkeJsBindFunction不同,注意区分
使用示例:
// C++代码
jsValue JS_CALL onNativeFunction(jsExecState es) {
jsValue v = jsArg(es, 0);
const wchar_t* str = jsToTemdivStringW(es, v);
OutdivutdebugStringW(str);
}
jsBindFunction("testCall", onNativeFunction, 1);
// JavaScript代码
window.testCall('testStrt');
jsBindGetter/jsBindSetter
void jsBindGetter(const char* name, jsNativeFunction fn)
void jsBindSetter(const char* name, jsNativeFunction fn)
绑定window对象的属性访问器/设置器。
示例:
jsBindGetter("XXX", getter_function)
wkeJsBindFunction
void wkeJsBindFunction(const char* name, wkeJsNativeFunction fn, void* param, unsigned int argCount)
增强版函数绑定。
说明:
- 可传递自定义参数
- 必须在webview创建前调用
JavaScript对象创建
jsObject
jsValue jsObject(jsExecState es, jsData* data)
构建可传递给JavaScript使用的对象。
回调函数类型:
// 属性访问器 (obj.prop形式调用)
typedef jsValue(*jsGetPropertyCallback)(jsExecState es, jsValue object, const char* propertyName);
// 属性设置器 (obj.prop = value形式调用)
typedef bool(*jsSetPropertyCallback)(jsExecState es, jsValue object, const char* propertyName, jsValue value);
// 函数调用处理 (obj()形式调用)
typedef jsValue(*jsCallAsFunctionCallback)(jsExecState es, jsValue object, jsValue* args, int argCount);
// 终结器 (垃圾回收时调用)
typedef void(*jsFinalizeCallback)(struct tagjsData* data);
jsFunction
jsValue jsFunction(jsExecState es, jsData* data)
创建主frame的全局函数。
说明:
- 功能类似jsObject但专注于函数创建
- JavaScript中使用XXX()形式调用时触发data的callAsFunction
jsGetData
jsData* jsGetData(jsExecState es, jsValue value)
获取通过jsObject或jsFunction创建的jsValue对应的jsData指针。
错误处理
jsGetLastErrorIfException
jsExceptionInfo* jsGetLastErrorIfException(jsExecState es)
获取最近的JavaScript执行异常信息。
说明:
- 用于wkeRunJs、jsCall等接口调用后的异常检查
- 无异常时返回nullptr