-
Notifications
You must be signed in to change notification settings - Fork 1.1k
api文档
unsigned int wkeVersion(); 获取目前api版本号
const utf8* wkeVersionString(); 获取版本字符串
void wkeGC(wkeWebView webView, long delayMs); 延迟让miniblink垃圾回收
void wkeSetFileSystem(WKE_FILE_OPEN pfnOpen, WKE_FILE_CLOSE pfnClose, WKE_FILE_SIZE pfnSize, WKE_FILE_READ pfnRead, WKE_FILE_SEEK pfnSeek) wke遗留的接口,设置文件相关的hook函数。可以作为拦截对文件的操作。现在已被更先进的函数取代
bool wkeIsLoaded(wkeWebView webView); 获取webView是否处于加载状态,还是加载完成。(此函数被废弃)
bool wkeIsLoadingSucceeded(wkeWebView webView) 判断webview是否加载成功
bool wkeIsLoadFailed(wkeWebView webView) 判断webview是否加载失败
bool wkeIsLoadComplete(wkeWebView webView) 判断webview是否加载完成。
注意,wkeIsLoadComplete等效于wkeIsLoadFailed、wkeIsLoadingSucceeded其中任何一个返回true
bool wkeIsDocumentReady(wkeWebView webView) DOM文档结构是否加载完成。和上述几个接口不同,上述几个接口是网络相关的判断。
void wkeStopLoading(wkeWebView webView) 停止加载页面
void wkeReload(wkeWebView webView) 重新加载页面
const utf8* wkeGetTitle(wkeWebView webView) 获取页面标题
const wchar_t* wkeGetTitleW(wkeWebView webView) 获取页面标题的宽字节版本
void wkeResize(wkeWebView webView, int w, int h) 重新设置页面的宽高。如果webView是带窗口模式的,会设置真窗口的宽高。
int wkeGetWidth(wkeWebView webView) 获取页面宽度
int wkeGetHeight(wkeWebView webView) 获取页面高度
int wkeGetContentWidth(wkeWebView webView) 获取网页排版出来的高度
int wkeGetContentHeight(wkeWebView webView) 获取网页排版出来的高度
void wkeSetDirty(wkeWebView webView, bool dirty) (被废弃)设置页面为脏状态,在下一帧将强制重绘页面
bool wkeIsDirty(wkeWebView webView) (被废弃)获取页面脏状态
void wkeAddDirtyArea(wkeWebView webView, int x, int y, int w, int h) (被废弃)添加页面脏矩形
void wkeLayoutIfNeeded(wkeWebView webView) (被废弃) 强制让页面重新排版
void wkePaint2(wkeWebView webView, void* bits, int bufWid, int bufHei, int xDst, int yDst, int w, int h, int xSrc, int ySrc, bool bCopyAlpha) 获取页面的像素。 参数: bits:外部申请并传递给mb的buffer,大小是bufWid * bufHei * 4 字节 bufWid、bufHei:bits的宽高 xDst、yDst:绘制到bits的哪个坐标。 w、h、xSrc、ySrc:mb需要取的画面的起始坐标 bCopyAlpha:是否拷贝画面的透明度值
void wkePaint(wkeWebView webView, void* bits, int pitch) 获取页面的像素的简化版函数。 bits:外部申请并传递给mb的buffer,大小是webview宽度 * 高度 * 4 字节。 pitch:填0即可。这个参数玩过directX的人应该懂
void wkeRepaintIfNeeded(wkeWebView webView) 强制重绘页面
HDC wkeGetViewDC(wkeWebView webView) 获取webview的DC
HWND wkeGetHostHWND(wkeWebView webView) 获取webveiw对应的窗口句柄。实现和wkeGetWindowHandle完全相同
bool wkeCanGoBack(wkeWebView webView) 页面是否可以后退
bool wkeGoBack(wkeWebView webView) 强制让页面后退
bool wkeCanGoForward(wkeWebView webView) 略
bool wkeGoForward(wkeWebView webView) 略
void wkeEditorSelectAll(wkeWebView webView) 全选整个页面
void wkeEditorUnSelect(wkeWebView webView) 略
void wkeEditorCopy(wkeWebView webView) 拷贝页面里被选中的字符串
void wkeEditorCut(wkeWebView webView) 略
void wkeEditorPaste(wkeWebView webView) 略
void wkeEditorDelete(wkeWebView webView) 略
void wkeEditorUndo(wkeWebView webView) 略
void wkeEditorRedo(wkeWebView webView) 略
const wchar_t * wkeGetCookieW(wkeWebView webView)、 获取页面的cookie
const utf8* wkeGetCookie(wkeWebView webView) 略
void wkeSetCookie(wkeWebView webView, const utf8* url, const utf8* cookie) 设置页面cookie。 注意的是,cookie必须符合curl的cookie写法。至于curl的cookie怎么写,请自行搜索
void wkeVisitAllCookie(void* params, wkeCookieVisitor visitor) 通过访问器visitor访问所有cookie。
void wkePerformCookieCommand(wkeCookieCommand command) 通过设置mb内置的curl来操作cookie。 command: wkeCookieCommandClearAllCookies:内部实际执行了curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");命令 wkeCookieCommandClearSessionCookies: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "SESS"); wkeCookieCommandFlushCookiesToFile: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "FLUSH"); wkeCookieCommandReloadCookiesFromFile: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "RELOAD");
void wkeSetCookieEnabled(wkeWebView webView, bool enable) 开启或关闭cookie
bool wkeIsCookieEnabled(wkeWebView webView) 略
void wkeSetCookieJarPath(wkeWebView webView, const WCHAR* path) 设置cookie的本地文件名。默认是“cookie.dat”
void wkeSetCookieJarFullPath(wkeWebView webView, const WCHAR* path) 设置cookie的全路径+文件名,如“c:\mb\cookie.dat”
void wkeSetLocalStorageFullPath(wkeWebView webView, const WCHAR* path) 设置local storage的全路径。如“c:\mb\LocalStorage\”
void wkeAddPluginDirectory(wkeWebView webView, const WCHAR* path) 添加npapi的插件搜索目录。如果不设置,默认是“‘exe目录’\plugins\”
void wkeSetMediaVolume(wkeWebView webView, float volume) 设置音量,未实现
float wkeGetMediaVolume(wkeWebView webView) 获取音量,未实现
bool wkeFireMouseEvent(wkeWebView webView, unsigned int message, int x, int y, unsigned int flags) 向mb发送鼠标消息。 参数: message:可取WM_MOUSELEAVE等Windows相关鼠标消息 x、y:坐标 flags:可取值有WKE_CONTROL、WKE_SHIFT、WKE_LBUTTON、WKE_MBUTTON、WKE_RBUTTON,可通过“或”操作并联。
bool wkeFireContextMenuEvent(wkeWebView webView, int x, int y, unsigned int flags) 向mb发送菜单消息(未实现)
bool wkeFireMouseWheelEvent(wkeWebView webView, int x, int y, int delta, unsigned int flags) 向mb发送滚轮消息,用法和参数类似wkeFireMouseEvent。
bool wkeFireKeyUpEvent(wkeWebView webView, unsigned int virtualKeyCode, unsigned int flags, bool systemKey) 向mb发送WM_KEYUP消息, 参数: virtualKeyCode:见https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx flags:可取值有WKE_REPEAT、WKE_EXTENDED,可通过“或”操作并联。 systemKey:暂时没用
bool wkeFireKeyDownEvent(wkeWebView webView, unsigned int virtualKeyCode, unsigned int flags, bool systemKey) 向mb发送WM_KEYDOWN消息,同上
bool wkeFireKeyPressEvent(wkeWebView webView, unsigned int charCode, unsigned int flags, bool systemKey) 向mb发送WM_CHAR消息,同上 参数: charCode:WM_CHAR消息的The character code of the key.见https://msdn.microsoft.com/en-us/library/windows/desktop/ms646276(v=vs.85).aspx
bool wkeFireWindowsMessage(wkeWebView webView, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* result) 向mb发送任意windows消息。不过目前mb主要用来处理光标相关。mb在无窗口模式下,要响应光标事件,需要手动发送光标消息,通过本函数
void wkeSetFocus(wkeWebView webView) 设置webview是焦点态。如果webveiw关联了窗口,窗口也会有焦点
void wkeKillFocus(wkeWebView webView) 略
wkeRect wkeGetCaretRect(wkeWebView webView) 获取编辑框的那个游标的位置
jsValue wkeRunJS(wkeWebView webView, const utf8* script) 运行一段js。返回js的值jsValue。jsValue是个封装了内部v8各种类型的类,如果需要获取详细信息,有jsXXX相关接口可以调用。见下述。
jsValue wkeRunJSW(wkeWebView webView, const wchar_t* script) 略
jsExecState wkeGlobalExec(wkeWebView webView) 获取页面主frame的jsExecState。jsExecState是什么,见下述。
void wkeSleep(wkeWebView webView) 暂没实现
void wkeWake(wkeWebView webView) 触发mb的心跳。如果需要高帧率,可以手动多次触发此接口
bool wkeIsAwake(wkeWebView webView) 未实现
void wkeSetZoomFactor(wkeWebView webView, float factor) 设置页面缩放系数,默认是1
float wkeGetZoomFactor(wkeWebView webView) 略
void wkeSetEditable(wkeWebView webView, bool editable) 未实现
void wkeOnTitleChanged(wkeWebView webView, wkeTitleChangedCallback callback, void* callbackParam) 设置标题变化的通知回调 typedef void(wkeTitleChangedCallback)(wkeWebView webView, void param, const wkeString title) title:标题的字符串封装。wkeString怎么用,见相关接口。 param:通过wkeOnTitleChanged的callbackParam设置
void wkeOnMouseOverUrlChanged(wkeWebView webView, wkeTitleChangedCallback callback, void* callbackParam) 鼠标划过的元素,如果是,则调用此回调,并发送a标签的url
void wkeOnURLChanged(wkeWebView webView, wkeURLChangedCallback callback, void* callbackParam) url改变回调
void wkeOnURLChanged2(wkeWebView webView, wkeURLChangedCallback2 callback, void* callbackParam) 和上个接口不同的是,回调多了个参数 typedef void(wkeURLChangedCallback2)(wkeWebView webView, void param, wkeWebFrameHandle frameId, const wkeString url) frameId表示frame的id。有相关接口可以判断这个frameId是否是主frame
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表示刷新的区域矩形
void wkeOnPaintBitUpdated(wkeWebView webView, wkePaintBitUpdatedCallback callback, void* callbackParam) 同上。不同的是 typedef void(wkePaintBitUpdatedCallback)(wkeWebView webView, void param, const void* buffer, const wkeRect* r, int width, int height) 回调过来的是填充好像素的buffer,而不是DC。方便嵌入到游戏中做离屏渲染
void wkeOnAlertBox(wkeWebView webView, wkeAlertBoxCallback callback, void* callbackParam) 网页调用alert会走到这个接口填入的回调
void wkeOnConfirmBox(wkeWebView webView, wkeConfirmBoxCallback callback, void* callbackParam) 略
void wkeOnPromptBox(wkeWebView webView, wkePromptBoxCallback callback, void* callbackParam) 略
void wkeOnNavigation(wkeWebView webView, wkeNavigationCallback callback, void* param) 网页开始浏览将触发回调 typedef bool(wkeNavigationCallback)(wkeWebView webView, void param, wkeNavigationType navigationType, const wkeString url); wkeNavigationType 表示浏览触发的原因。 值有: WKE_NAVIGATION_TYPE_LINKCLICK, 点击触发 WKE_NAVIGATION_TYPE_FORMSUBMITTE, 点击form触发 WKE_NAVIGATION_TYPE_BACKFORWARD, 前进后退触发 WKE_NAVIGATION_TYPE_RELOAD, 重新加载触发 注意的是,wkeNavigationCallback回调的返回值,如果是true,表示可以继续进行浏览,false表示阻止本次浏览。
void wkeOnCreateView(wkeWebView webView, wkeCreateViewCallback callback, void* param) 网页点击创建新窗口时将触发回调 typedef wkeWebView(wkeCreateViewCallback)(wkeWebView webView, void param, wkeNavigationType navigationType, const wkeString url, const wkeWindowFeatures* windowFeatures); 参数: wkeWindowFeatures: typedef struct { int x; int y; int width; int height;
bool menuBarVisible;
bool statusBarVisible;
bool toolBarVisible;
bool locationBarVisible;
bool scrollbarsVisible;
bool resizable;
bool fullscreen;
} wkeWindowFeatures;
void wkeOnDocumentReady(wkeWebView webView, wkeDocumentReadyCallback callback, void* param) 对应js里的body onload事件
void wkeOnDocumentReady2(wkeWebView webView, wkeDocumentReady2Callback callback, void* param) 同上。区别是wkeDocumentReady2Callback多了wkeWebFrameHandle frameId参数。可以判断是否是主frame
void wkeOnLoadingFinish(wkeWebView webView, wkeLoadingFinishCallback callback, void* param) 页面加载完成回调
void wkeOnDownload(wkeWebView webView, wkeDownloadCallback callback, void* param) 页面下载事件回调。点击某些链接,触发下载会调用
void wkeNetOnResponse(wkeWebView webView, wkeNetResponseCallback callback, void* param) 一个网络请求发送后,收到服务器response触发回调
void wkeOnConsole(wkeWebView webView, wkeConsoleCallback callback, void* param) 网页调用console触发
void wkeSetUIThreadCallback(wkeWebView webView, wkeCallUiThread callback, void* param) 暂时未实现
void wkeOnLoadUrlBegin(wkeWebView webView, wkeLoadUrlBeginCallback callback, void* callbackParam) 任何网络请求发起前会触发此回调
typedef bool(wkeLoadUrlBeginCallback)(wkeWebView webView, void param, const char *url, void *job)
注意: 1,此回调功能强大,在回调里,如果对job设置了wkeNetHookRequest,则表示mb会缓存获取到的网络数据,并在这次网络请求 结束后调用wkeOnLoadUrlEnd设置的回调,同时传递缓存的数据。在此期间,mb不会处理网络数据。 2,如果在wkeLoadUrlBeginCallback里没设置wkeNetHookRequest,则不会触发wkeOnLoadUrlEnd回调 3,如果wkeLoadUrlBeginCallback回调里返回true,表示mb不处理此网络请求(既不会发送网络请求)。返回false,表示mb依然会发送网络请求。 用法举例: 假如需要hook百度某个url(如http://baidu.com/a.js),替换为本地c:\b.js,则可以这样实现: void readJsFile(const wchar_t* path, std::vector* buffer) { HANDLE hFile = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hFile) { DebugBreak(); return; }
DWORD fileSizeHigh;
const DWORD bufferSize = ::GetFileSize(hFile, &fileSizeHigh);
DWORD numberOfBytesRead = 0;
buffer->resize(bufferSize);
BOOL b = ::ReadFile(hFile, &buffer->at(0), bufferSize, &numberOfBytesRead, nullptr);
::CloseHandle(hFile);
b = b;
}
static bool HookUrl(void* job, const char* url, const char* hookUrl, const wchar_t* localFile, const char* mime) { if (0 != strstr(url, hookUrl)) { wkeNetSetMIMEType(job, (char*)mime); // "text/html" "text/javascript" std::vector buffer; ReadJsFile(localFile, &buffer); wkeNetSetData(job, &buffer[0], buffer.size()); return true; }
return false;
}
bool handleLoadUrlBegin(wkeWebView webView, void* param, const char* url, void* job) { if (HookUrl(job, url, "http://baidu.com/a.js", L"c:\b.js", "text/javascript")) return true;
return false;
}
如果需要拿到http://baidu.com/a.js的真实网络数据再修改,则可以 bool handleLoadUrlBegin(wkeWebView webView, void* param, const char* url, void* job) { if (0 != strstr(url, "http://baidu.com/a.js")) { wkeNetHookRequest(job); return true; } return false; }
void handleLoadUrlEnd(wkeWebView webView, void* param, const char* url, void* job, void* buf, int len) { char code[] = "console.log('test')"; wkeNetSetData(job, code, sizeof(code)); }
void wkeOnDidCreateScriptContext(wkeWebView webView, wkeDidCreateScriptContextCallback callback, void* callbackParam) javascript的v8执行环境被创建时触发此回调 注意:每个frame创建时都会触发此回调。
void wkeOnWillReleaseScriptContext(wkeWebView webView, wkeWillReleaseScriptContextCallback callback, void* callbackParam) javascript的v8执行环境被关闭时触发此回调
void wkeOnWillMediaLoad(wkeWebView webView, wkeWillMediaLoadCallback callback, void* callbackParam) video等多媒体标签创建时触发此回调
bool wkeIsMainFrame(wkeWebView webView, wkeWebFrameHandle frameId) 判断frameId是否是主frame
wkeWebFrameHandle wkeWebFrameGetMainFrame(wkeWebView webView) 获取主frame的句柄
jsValue wkeRunJsByFrame(wkeWebView webView, wkeWebFrameHandle frameId, const utf8* script, bool isInClosure) 运行js在指定的frame上,通过frameId
const utf8* wkeGetFrameUrl(wkeWebView webView, wkeWebFrameHandle frameId) 获取frame对应的url
const utf8* wkeGetString(const wkeString s) 获取wkeString结构体对应的字符串,utf8编码
const wchar_t* wkeGetStringW(const wkeString string) 获取wkeString结构体对应的字符串,utf16编码
void wkeSetString(wkeString string, const utf8* str, size_t len) 设置wkeString结构体对应的字符串,utf8编码
void wkeSetStringW(wkeString string, const wchar_t* str, size_t len) 设置wkeString结构体对应的字符串,utf16编码
wkeString wkeCreateStringW(const wchar_t* str, size_t len) 通过utf16编码的字符串,创建一个wkeString
void wkeDeleteString(wkeString str) 析构这个wkeString
void wkeSetUserKeyValue(wkeWebView webView, const char* key, void* value) 对webView设置一个key value键值对。可以用来保存用户自己定义的任何指针
void* wkeGetUserKeyValue(wkeWebView webView, const char* key) 略
int wkeGetCursorInfoType(wkeWebView webView) 获取光标类型
wkeWebView wkeCreateWebWindow(wkeWindowType type, HWND parent, int x, int y, int width, int height) 创建一个带真实窗口的wkeWebView。 参数: WKE_WINDOW_TYPE_POPUP:普通窗口 WKE_WINDOW_TYPE_TRANSPARENT:透明窗口。mb内部通过layer window实现 WKE_WINDOW_TYPE_CONTROL:嵌入在父窗口里的子窗口。此时parent需要被设置
void wkeDestroyWebWindow(wkeWebView webWindow) 销毁wkeWebView对应的所有数据结构,包括真实窗口等
HWND wkeGetWindowHandle(wkeWebView webWindow) 获取窗口对应的真实句柄。和wkeGetHostHWND的实现完全相同
void wkeOnWindowClosing(wkeWebView webWindow, wkeWindowClosingCallback callback, void* param) wkeWebView如果是真窗口模式,则在收到WM_CLODE消息时触发此回调。可以通过在回调中返回false拒绝关闭窗口
void wkeOnWindowDestroy(wkeWebView webWindow, wkeWindowDestroyCallback callback, void* param) 窗口即将被销毁时触发回调。不像wkeOnWindowClosing,这个操作无法取消
void wkeShowWindow(wkeWebView webWindow, bool showFlag) 略
void wkeEnableWindow(wkeWebView webWindow, bool enableFlag) 略
void wkeMoveWindow(wkeWebView webWindow, int x, int y, int width, int height) 略
void wkeMoveToCenter(wkeWebView webWindow) 窗口在父窗口或屏幕里居中
void wkeResizeWindow(wkeWebView webWindow, int width, int height) resize窗口,和wkeResize效果一样
wkeSetWindowTitle 略
wkeSetWindowTitleW 略
void wkeSetDeviceParameter(wkeWebView webView, const char* device, const char* paramStr, int paramInt, float paramFloat) 设置mb模拟的硬件设备环境。主要用在伪装手机设备场景。 参数: device:设备的字符串。可取值有: "navigator.maxTouchPoints":此时paramInt需要被设置。表示touch的点数 "navigator.platform":此时paramStr需要被设置,表示js里获取的navigator.platform字符串 "navigator.hardwareConcurrency":此时paramInt需要被设置,表示js里获取的navigator.hardwareConcurrency整数值 "screen.width":此时paramInt需要被设置,表示js里获取的screen.width整数值 "screen.height":同上 "screen.availWidth":同上 "screen.availHeight":同上 "screen.pixelDepth":同上 "screen.pixelDepth":目前等价于"screen.pixelDepth" "window.devicePixelRatio":同上
void wkeInit() 初始化整个mb。此句必须在所有mb api前最先调用。并且所有mb api必须和调用wkeInit的线程为同个线程
void wkeShutdown() 关闭整个mb。调用后,所有mb api将不能再被调用,否则会有崩溃
void wkeInitialize() 效果和wkeInit一模一样
void wkeSetProxy(const wkeProxy* proxy) 设置整个mb的代码。此句是全局生效
void wkeSetViewProxy(wkeWebView webView, wkeProxy* proxy) 设置整个mb的代码。此句是针对特定webview生效
void wkeConfigure(const wkeSettings* settings) 设置一些配置项 typedef struct { wkeProxy proxy; unsigned int mask; } wkeSettings; mask可以取: WKE_SETTING_PROXY:效果和wkeSetProxy一样,通过proxy设置 WKE_SETTING_PAINTCALLBACK_IN_OTHER_THREAD:这是个高级用法,开启时,on paint回调会在另外个线程(其实就是渲染线程)。 这个是用来实现多线程上屏功能,性能更快。
bool wkeIsInitialize() 略
void wkeFinalize() 效果和wkeShutdown一样
void wkeSetMemoryCacheEnable(wkeWebView webView, bool b) 开启内存缓存。网页的图片等都会在内存缓存里。关闭后,内存使用会降低一些,但容易引起一些问题,如果不懂怎么用,最好别开
void wkeSetTouchEnabled(wkeWebView webView, bool b) 开启触屏模式。开启后,鼠标消息将自动转换成触屏消息
void wkeSetMouseEnabled(wkeWebView webView, bool b) 开启关闭鼠标消息,可以在开启触屏后,关闭鼠标消息
void wkeSetNavigationToNewWindowEnable(wkeWebView webView, bool b) 关闭后,点标签将不会弹出新窗口,而是在本窗口跳转
void wkeSetCspCheckEnable(wkeWebView webView, bool b) 关闭后,跨域检查将被禁止,此时可以做任何跨域操作,如跨域ajax,跨域设置iframe
void wkeSetNpapiPluginsEnabled(wkeWebView webView, bool b) 开启关闭npapi插件,如flash
void wkeSetHeadlessEnabled(wkeWebView webView, bool b) 开启无头模式。开启后,将不会渲染页面,提升了网页性能。此功能方便用来实现一些爬虫,或者刷单工具
void wkeSetDebugConfig(wkeWebView webView, const char* debugString, const char* param) 开启一些实验性选项。 参数: debugString:可以选的值有: "showDevTools":开启开发者工具,此时param要填写开发者工具的资源路径,如file:///c:/miniblink-release/front_end/inspector.html 注意param此时必须是utf8编码
"wakeMinInterval":设置帧率,默认值是10,值越大帧率越低 "drawMinInterval:设置帧率,默认值是3,值越大帧率越低
void wkeSetHandle(wkeWebView webView, HWND wnd) 设置wkeWebView对应的窗口句柄。 注意,只有在无窗口模式下才能使用。如果是用wkeCreateWebWindow创建的webview,已经自带窗口句柄了。
void wkeSetHandleOffset(wkeWebView webView, int x, int y) 设置无窗口模式下的绘制偏移。在某些情况下(主要是离屏模式),绘制的地方不在真窗口的(0, 0)处,就需要手动调用此接口
void wkeSetViewSettings(wkeWebView webView, const wkeViewSettings* settings) 设置一些webview相关的设置 目前只有背景颜色可以设置
void wkeSetTransparent(wkeWebView webView, bool transparent) 通知无窗口模式下,webview开启透明模式。
bool wkeIsTransparent(wkeWebView webView) 判断窗口是否是分层窗口(layer window)
void wkeSetUserAgent(wkeWebView webView, const utf8* userAgent) 设置webview的UA
void wkeSetUserAgentW(wkeWebView webView, const wchar_t* userAgent) 略
void wkeLoadURL(wkeWebView webView, const utf8* url) 加载url。url必须是网络路径,如"http://qq.com/"
void wkeLoadW(wkeWebView webView, const wchar_t* url) 略
void wkeLoadHTML(wkeWebView webView, const utf8* html) 加载一段html,如"" 注意: 如果html里有相对路径,则是相对exe所在目录的路径
void wkeLoadFile(wkeWebView webView, const utf8* filename) 加载本地路径,如"file:///c:/1.html"
const utf8* wkeGetURL(wkeWebView webView) 获取webview主frame的url
void wkeNetSetHTTPHeaderField(void* jobPtr, wchar_t* key, wchar_t* value, bool response) 在wkeOnLoadUrlBegin回调里调用,表示设置http请求(或者file:///协议)的 http header field。 response一直要被设置成false
void wkeNetSetMIMEType(void* jobPtr, char* type) 在wkeOnLoadUrlBegin回调里调用,表示设置http请求的MIME type
void wkeNetGetMIMEType(void* jobPtr, wkeString mime) 略
void wkeNetSetData(void* jobPtr, void* buf, int len) 在wkeOnLoadUrlEnd里被调用,表示设置hook后缓存的数据
void wkeNetCancelRequest(void* jobPtr) 在wkeOnLoadUrlBegin回调里调用,设置后,此请求将被取消。
void wkeNetHoldJobToAsynCommit(void* jobPtr) 高级用法。在wkeOnLoadUrlBegin回调里调用。 有时候,wkeOnLoadUrlBegin里拦截到一个请求后,不能马上判断出结果。此时可以调用本接口,然后在 异步的某个时刻,调用wkeNetContinueJob来让此请求继续进行
wkeRequestType wkeNetGetRequestMethod(void *jobPtr) 获取此请求的method,如post还是get
wkePostBodyElements* wkeNetGetPostBody(void *jobPtr) 获取此请求中的post数据。只有当请求是post时才有效果
wkePostBodyElements* wkeNetCreatePostBodyElements(wkeWebView webView, size_t length) void wkeNetFreePostBodyElements(wkePostBodyElements* elements)void wkeNetFreePostBodyElements(wkePostBodyElements* elements) wkePostBodyElement* wkeNetCreatePostBodyElement(wkeWebView webView) void wkeNetFreePostBodyElement(wkePostBodyElement* element) 这四个接口要结合起来使用。 当wkeOnLoadUrlBegin里判断是post时,可以通过wkeNetCreatePostBodyElements来创建一个新的post数据包。 然后wkeNetFreePostBodyElements来释放原post数据。
int jsArgCount(jsExecState es) 获取es里存的参数个数。一般是在绑定的js调用c++回调里使用,判断js传递了多少参数给c++
jsType jsArgType(jsExecState es, int argIdx) 判断第argIdx个参数的参数类型。argIdx从是个0开始计数的值。如果超出jsArgCount返回的值,将发生崩溃
jsValue jsArg(jsExecState es, int argIdx) 获取第argIdx对应的参数的jsValue值。
jsType jsTypeOf(jsValue v) 获取v对应的类型。 主要取值有: JSTYPE_NUMBER:数字。可以是无符号,有符号整数,浮点数 JSTYPE_STRING:字符串 JSTYPE_BOOLEAN:布尔值 JSTYPE_OBJECT:对象。表示js里的对象 JSTYPE_FUNCTION:js里的函数对象。一个jsValue优先判断是否是JSTYPE_FUNCTION JSTYPE_UNDEFINED:js的undefined JSTYPE_ARRAY:数组
bool jsIsNumber(jsValue v) 判断v是否为数字
bool jsIsString(jsValue v) 略
bool jsIsBoolean(jsValue v) 略
bool jsIsObject(jsValue v) 当v不是数字、字符串、undefined、null、函数的时候,此接口返回true
bool jsIsTrue(jsValue v) 如果v本身是个布尔值,返回对应的true或者false;如果是个对象(JSTYPE_OBJECT),返回false(这里注意)
bool jsIsFalse(jsValue v) 等价于!jsIsTrue(v)
int jsToInt(jsExecState es, jsValue v) 如果v是个整形,返回相应值。如果是其他类型,返回0(这里注意)
double jsToDouble(jsExecState es, jsValue v) 如果v是个浮点形,返回相应值。如果是其他类型,返回0.0(这里注意)
bool jsToBoolean(jsExecState es, jsValue v) 如果v是个布尔形,返回相应值。如果是其他类型,返回false(这里注意)
const wchar_t* jsToTempStringW(jsExecState es, jsValue v) 如果v是个字符串,返回相应值。如果是其他类型,返回L""(这里注意) 另外,返回的字符串不需要外部释放。mb会在下一帧自动释放
const utf8* jsToTempString(jsExecState es, jsValue v) 同上
const utf8* jsToString(jsExecState es, jsValue v) 同上,只是返回的是utf8编码
const wchar_t* jsToStringW(jsExecState es, jsValue v) 同上
jsValue jsInt(int n) 构建一个int型的jsValue
jsValue jsString(jsExecState es, const utf8* str) 构建一个utf8编码的字符串的的jsValue。str会在内部拷贝保存
jsValue jsArrayBuffer(jsExecState es, char * buffer, size_t size) 构建一个js的arraybuffer类型的jaValue。主要用来处理一些二进制数据
jsValue jsEmptyObject(jsExecState es) 构建一个临时js object的jsValue
jsValue jsEmptyArray(jsExecState es)、 构建一个空的js数组
jsValue jsEvalW(jsExecState es, const wchar_t* str) 执行一段js,并返回值。 注意:str的代码会在mb内部自动被包裹在一个function(){}中。所以使用的变量会被隔离 注意:要获取返回值,请写return。这和wke不太一样。wke不需要写retrun
jsValue jsEvalExW(jsExecState es, const wchar_t* str, bool isInClosure) 和上述接口的区别是,isInClosure表示是否要包裹一层function(){}。 jsEvalW相当于jsEvalExW(es, str, false)
jsValue jsCall(jsExecState es, jsValue func, jsValue thisValue, jsValue* args, int argCount) 调用一个func对应的js函数。 如果此js函数是成员函数,则需要填thisValue。否则可以传jsUndefined。 args是个数组,个数由argCount控制。 func可以是从js里取的,也可以是自行构造的。
jsValue jsCallGlobal(jsExecState es, jsValue func, jsValue* args, int argCount) 调用window上的全局函数
jsValue jsGet(jsExecState es, jsValue object, const char* prop) 如果object是个js的object,则获取prop指定的属性。如果object不是js object类型,则返回 jsUndefined
void jsSet(jsExecState es, jsValue object, const char* prop, jsValue value) 设置object的属性
jsValue jsGetGlobal(jsExecState es, const char* prop) 获取window上的属性
void jsSetGlobal(jsExecState es, const char* prop, jsValue v) 设置window上的属性
jsValue jsGetAt(jsExecState es, jsValue object, int index) 设置js arrary的第index个成员的值,object必须是js array才有用,否则会返回jsUndefined
void jsSetAt(jsExecState es, jsValue object, int index, jsValue value) 设置js arrary的第index个成员的值,object必须是js array才有用。
int jsGetLength(jsExecState es, jsValue object) 获取js arrary的长度,object必须是js array才有用。
void jsSetLength(jsExecState es, jsValue object, int length) 设置js arrary的长度,object必须是js array才有用。
wkeWebView jsGetWebView(jsExecState es) 获取es对应的webview
void jsGC() 强制垃圾回收
void jsBindFunction(const char* name, jsNativeFunction fn, unsigned int argCount) 绑定一个全局函数到主frame的window上。
jsValue JS_CALL onNativeFunction(jsExecState es) { jsValue v = jsArg(es, 0); const wchar_t* str = jsToTempStringW(es, v); OutputdebugStringW(str); } jsBindFunction("testCall", onNativeFunction, 1);
window.testCall('testStrt');
void jsBindGetter(const char* name, jsNativeFunction fn) 对js winows绑定一个属性访问器,在js里windows.XXX这种形式调用时,fn会被调用
void jsBindSetter(const char* name, jsNativeFunction fn) 对js winows绑定一个属性设置器。
void wkeJsBindFunction(const char* name, wkeJsNativeFunction fn, void* param, unsigned int argCount) 和jsBindFunction功能类似,但更方便一点,可以传一个param做自定义数据。
jsValue jsObject(jsExecState es, jsData* data) 构建一个js Objcet,可以传递给js使用。
typedef struct tagjsData { char typeName[100]; jsGetPropertyCallback propertyGet; jsSetPropertyCallback propertySet; jsFinalizeCallback finalize; jsCallAsFunctionCallback callAsFunction; } jsData; typeName表示object的名字,如可以设置成XXX
typedef jsValue(jsGetPropertyCallback)(jsExecState es, jsValue object, const char propertyName); 属性访问器。在js里XXX.yyy这样调用时,jsGetPropertyCallback会被触发,并且propertyName的值为yyy
typedef bool(jsSetPropertyCallback)(jsExecState es, jsValue object, const char propertyName, jsValue value); 属性设置器。在js里XXX.yyy=1这样调用时,jsSetPropertyCallback会被触发,并且propertyName的值为yyy,value的值是字符串类型。可以通过之前提到的字符串 操作接口来获取
typedef jsValue(jsCallAsFunctionCallback)(jsExecState es, jsValue object, jsValue args, int argCount); 在js里XXX()这样调用时会触发。
typedef void(jsFinalizeCallback)(struct tagjsData data); 在js里没人引用,且垃圾回收时会触发
jsValue jsFunction(jsExecState es, jsData* data) 创建一个主frame的全局函数。jsData的用法如上。js调用:XXX() 此时jsData的callAsFunction触发。 其实jsFunction和jsObject功能基本类似。且jsObject的功能更强大一些
jsData* jsGetData(jsExecState es, jsValue value) 获取jsObject或jsFunction创建的jsValue对应的jsData指针。