VIP-API文档

前言

miniblink的接口是纯C导出,只要使用mb.h、mb.dll、node.dll即可加载。无需.lib。

mb.dll是基于mb的主dll(通常为node.dll)之上的一个封装层,在拥有原版主dll的所有能力之外,

额外增加了:

等功能。

若要使用mb.dll,可以向weolar@qq.com 购买,详情可见:http://miniblink.net/pricing/pricing.htm

另外mb.dll必须依赖node.dll。

升级到新接口注意事项:

API

void mbSetMbDllPath(const wchar_t* dllPath)

设置mb.dll的全路径+文件名
参数:
dllPath:dll的全路径,注意是全路径

void mbSetMbMainDllPath(const wchar_t* dllPath)

设置node.dll的全路径+文件名
参数:
dllPath:dll的全路径,注意是全路径

void mbInit(const mbSettings* settings)

初始化整个mb。此句必须在所有mb api前最先调用。并且所有mb api必须和调用mbInit的线程为同个线程
参数:
typedef struct { mbProxy proxy; unsigned int mask; } mbSettings; mask可以取:
WKE_SETTING_PROXY:效果和mbSetProxy一样,通过proxy设置
WKE_SETTING_PAINTCALLBACK_IN_OTHER_THREAD:这是个高级用法,开启时,on paint回调会在另外个线程(其实就是渲染线程)。
这个是用来实现多线程上屏功能,性能更快。

void mbStopLoading(mbWebView webView)

停止加载页面
参数:略

bool mbReload(mbWebView webView)

重新加载页面
参数:略

void mbResize(mbWebView webView, int w, int h)

重新设置页面的宽高。如果webView是带窗口模式的,会设置真窗口的宽高。
参数:略

HWND mbGetHostHWND(mbWebView webView)

获取webveiw对应的窗口句柄。
参数:略

bool mbGoBack(mbWebView webView)

强制让页面后退
参数:略

bool mbGoForward(mbWebView webView)

参数:略

void mbEditorSelectAll(mbWebView webView)

给webview发送全选命令
参数:略

void mbEditorUnSelect(mbWebView webView)

参数:略

void mbEditorCopy(mbWebView webView)

拷贝页面里被选中的字符串
参数:略

void mbEditorCut(mbWebView webView)

参数:略

void mbEditorDelete(mbWebView webView)

参数:略

void mbEditorUndo(mbWebView webView)

参数:略

void mbEditorRedo(mbWebView webView)

参数:略

const wchar_t * mbGetCookieW(mbWebView webView, mbGetCookieCallback callback, void* param)

获取页面的cookie,得到的cookie将在callback里返回。这个过程是异步的
参数:略

void mbSetCookie(mbWebView webView, const utf8* url, const utf8* cookie)

设置页面cookie。
参数:略
注意:cookie必须符合curl的cookie写法。一个例子是:PERSONALIZE=123;expires=Monday, 13-Jun-2022 03:04:55 GMT; domain=.fidelity.com; path=/; secure

void mbVisitAllCookie(void* params, mbCookieVisitor visitor)

通过访问器visitor访问所有cookie。
参数:
visitor:访问器。

void mbPerformCookieCommand(mbCookieCommand command)

通过设置mb内置的curl来操作cookie。
参数:
command:
mbCookieCommandClearAllCookies: 内部实际执行了curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");
mbCookieCommandClearSessionCookies: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "SESS");
mbCookieCommandFlushCookiesToFile: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "FLUSH");
mbCookieCommandReloadCookiesFromFile: curl_easy_setopt(curl, CURLOPT_COOKIELIST, "RELOAD");
注意:这个接口只是调用curl设置命令,并不会去修改js里的内容

void mbClearCookie(mbWebView webView)

清理cookie。目前只支持清理所有页面的cookie。
参数:无

void mbSetCookieEnabled(mbWebView webView, bool enable)

开启或关闭cookie
参数:略
注意:这个接口只是影响blink,并不会设置curl。所以还是会生成curl的cookie文件

void mbSetCookieJarPath(mbWebView webView, const WCHAR* path)

设置cookie的本地文件目录。默认是当前目录。cookies存在当前目录的“cookie.dat”里
参数:略

void mbSetCookieJarFullPath(mbWebView webView, const WCHAR* path)

设置cookie的全路径+文件名,如“c:\mb\cookie.dat”
参数:略

void mbSetLocalStorageFullPath(mbWebView webView, const WCHAR* path)

设置local storage的全路径。如“c:\mb\LocalStorage\”
参数:略
注意:这个接口只能接受目录。

void mbSetDiskCacheEnabled(mbWebView webView, bool enable)

开启或关闭硬盘本地缓存
参数:略
注意:这个接口是全局的。webView参数暂时没用

void mbEnableHighDPISupport()

开启高分屏支持。
参数:略
注意:这个api内部是通过设置ZOOM,并且关闭系统默认放大来实现。所以再使用wkeGetZoomFactor会发现值可能不为1

bool mbFireMouseEvent(mbWebView webView, unsigned int message, int x, int y, unsigned int flags)

向mb发送鼠标消息
参数:
message:可取WM_MOUSELEAVE等Windows相关鼠标消息
x、y:坐标
flags:可取值有MB_CONTROL、MB_SHIFT、MB_LBUTTON、MB_MBUTTON、MB_RBUTTON,可通过“或”操作并联。

bool mbFireContextMenuEvent(mbWebView webView, int x, int y, unsigned int flags)

向mb发送菜单消息(未实现)
参数:略

bool mbFireMouseWheelEvent(mbWebView webView, int x, int y, int delta, unsigned int flags)

向mb发送滚轮消息,用法和参数类似mbFireMouseEvent。
参数:略

bool mbFireKeyUpEvent(mbWebView 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 mbFireKeyDownEvent(mbWebView webView, unsigned int virtualKeyCode, unsigned int flags, bool systemKey)

参数:略

bool mbFireKeyPressEvent(mbWebView webView, unsigned int charCode, unsigned int flags, bool systemKey)

参数:
charCode:WM_CHAR消息的The character code of the key.见https://msdn.microsoft.com/en-us/library/windows/desktop/ms646276(v=vs.85).aspx

bool mbFireWindowsMessage(mbWebView webView, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT* result)

向mb发送任意windows消息。不过目前mb主要用来处理光标相关。mb在无窗口模式下,要响应光标事件,需要通过本函数手动发送光标消息
参数:略

void mbSetFocus(mbWebView webView)

设置webview是焦点态。如果webveiw关联了窗口,窗口也会有焦点
参数:略

void mbKillFocus(mbWebView webView)

参数:略

void mbRunJs(mbWebView webView, mbWebFrameHandle frameId, const utf8* script, BOOL isInClosure, mbRunJsCallback callback, void* param, void* unuse)

运行一段js。返回js的值mbValue在callback中获取。mbValue是个封装了内部v8各种类型的类,如果需要获取详细信息,有mbXXX相关接口可以调用。见下述。
参数:略

void mbOnJsQuery(mbWebView webView, mbJsQueryCallback callback, void* param)

注册js通知native的回调。
参数:回调:typedef void(* mbJsQueryCallback)(mbWebView webView, void* param, mbJsExecState es, int64_t queryId, int customMsg, const utf8* request)

设置一个回调,js中以下面形式调用:

function onNative(customMsg, response) {

console.log("on~~mbQuery:" + response);

}

window.mbQuery(0x123456, "test run", onNative);

其中0x123456将被发送给mbJsQueryCallback的customMsg,"test run"给request。

如果需要在mbJsQueryCallback返回消息给js,则在mbJsQueryCallback里调用:

mbResponseQuery(mbWebView webView, int64_t queryId, int customMsg, const utf8* response);

customMsg可以是任意的整数,request是任意的字符串,js中的onNative将收到回调

void mbSetZoomFactor(mbWebView webView, float factor)

设置页面缩放系数,默认是1
参数:略

float mbGetZoomFactor(mbWebView webView)

参数:略

void mbOnTitleChanged(mbWebView webView, mbTitleChangedCallback callback, void* callbackParam)

设置标题变化的通知回调
参数:typedef void(*mbTitleChangedCallback)(mbWebView webView, void* param, const utf8* title);
title:标题的字符串封装。mbString怎么用,见相关接口。 param:通过mbOnTitleChanged的callbackParam设置

void mbOnURLChanged(mbWebView webView, mbURLChangedCallback callback, void* callbackParam)

url改变回调。注意回调中还返回了前面是否可以前进后退相关信息
参数:typedef void(*mbURLChangedCallback)(mbWebView webView, void* param, const utf8* url, bool canGoBack, bool canGoForward)

void mbOnPaintUpdated(mbWebView webView, mbPaintUpdatedCallback callback, void* callbackParam)

页面有任何需要刷新的地方,将调用此回调
参数:typedef void(*mbPaintUpdatedCallback)(mbWebView webView, void* param, const HDC hdc, int x, int y, int cx, int cy)
x、y、cx、cy表示刷新的区域矩形

void mbOnPaintBitUpdated(mbWebView webView, mbPaintBitUpdatedCallback callback, void* callbackParam)

同上。不同的是回调过来的是填充好像素的buffer,而不是DC。方便嵌入到游戏中做离屏渲染
参数:略

void mbOnAlertBox(mbWebView webView, mbAlertBoxCallback callback, void* callbackParam)

网页调用alert会走到这个接口填入的回调
参数:略

void mbOnConfirmBox(mbWebView webView, mbConfirmBoxCallback callback, void* callbackParam)

参数:略

void mbOnPromptBox(mbWebView webView, mbPromptBoxCallback callback, void* callbackParam)

参数:略

void mbOnNavigation(mbWebView webView, mbNavigationCallback callback, void* param)

网页开始浏览将触发回调
参数:typedef bool(*mbNavigationCallback)(mbWebView webView, void* param, mbNavigationType navigationType, const utf8* url);
mbNavigationType: 表示浏览触发的原因。可以取的值有:
MB_NAVIGATION_TYPE_LINKCLICK:点击a标签触发
MB_NAVIGATION_TYPE_FORMSUBMITTE:点击form触发
MB_NAVIGATION_TYPE_BACKFORWARD:前进后退触发
MB_NAVIGATION_TYPE_RELOAD:重新加载触发
注意:mbNavigationCallback回调的返回值,如果是true,表示可以继续进行浏览,false表示阻止本次浏览。

void mbOnCreateView(mbWebView webView, mbCreateViewCallback callback, void* param)

网页点击a标签创建新窗口时将触发回调。注意此接口
参数:typedef mbWebView(*mbCreateViewCallback)(mbWebView webView, void* param, mbNavigationType navigationType, const mbString url, const mbWindowFeatures* windowFeatures);

void mbOnDocumentReady(mbWebView webView, mbDocumentReady2Callback callback, void* param)

同上。页面DOM发出ready事件时回调。可以判断是否是主frame
参数:略

void mbOnDownload(mbWebView webView, mbDownloadCallback callback, void* param)

页面下载事件回调。点击某些链接,触发下载会调用
参数:略

void mbOnDownloadInBlinkThread(mbWebView webView, mbDownloadInBlinkThreadCallback callback, void* param)

同上,但回调提供的参数更多。另外回调是在非UI线程。此外可在回调中调用mbPopupDialogAndDownload,这样能弹出文件另存框,并自动下载
参数:略

mbDownloadOpt mbPopupDialogAndDownload(mbWebView webView, void* param, size_t contentLength, const char* url, const char* mime, const char* disposition, mbNetJob job, mbNetJobDataBind* dataBind, void* unuse)

见上。在mbOnDownloadInBlinkThread的回调中调用。mbPopupDialogAndDownload的参数来自mbOnDownloadInBlinkThread的回调
参数:略

void mbNetOnResponse(mbWebView webView, mbNetResponseCallback callback, void* param)

一个网络请求发送后,收到服务器response触发回调
参数:略

void mbOnConsole(mbWebView webView, mbConsoleCallback callback, void* param)

网页调用console触发
参数:略

void mbOnLoadUrlBegin(mbWebView webView, mbLoadUrlBeginCallback callback, void* callbackParam)

任何网络请求发起前会触发此回调
参数:typedef bool(*mbLoadUrlBeginCallback)(mbWebView webView, void* param, const char *url, void *job)
注意:
1,此回调功能强大,在回调里,如果对job设置了mbNetHookRequest,则表示mb会缓存获取到的网络数据,并在这次网络请求 结束后调用mbOnLoadUrlEnd设置的回调,同时传递缓存的数据。在此期间,mb不会处理网络数据。
2,如果在mbLoadUrlBeginCallback里没设置mbNetHookRequest,则不会触发mbOnLoadUrlEnd回调。
3,如果mbLoadUrlBeginCallback回调里返回true,表示mb不处理此网络请求(既不会发送网络请求)。返回false,表示mb依然会发送网络请求。
4, 注意此接口是在非UI线程执行(很重要!)请记得自行负责线程同步等
用法举例:
假如需要hook百度某个url(如httdiv://baidu.com/a.js),替换为本地c:\b.js,则可以这样实现:
	void readJsFile(const wchar_t* divath, std::vector* buffer) {
			    HANDLE hFile = CreateFileW(divath, 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, &amdiv;fileSizeHigh);
			
			    DWORD numberOfBytesRead = 0;
			    buffer->resize(bufferSize);
			    BOOL b = ::ReadFile(hFile, &amdiv;buffer->at(0), bufferSize, &amdiv;numberOfBytesRead, nulldivtr);
			    ::CloseHandle(hFile);
			
			}
			
			static bool HookUrl(void* job, const char* url, const char* hookUrl, const wchar_t* localFile, const char* mime) {
			    if (0 != strstr(url, hookUrl)) {
			        mbNetSetMIMETydive(job, (char*)mime); // "text/html" "text/javascridivt"
			        std::vector buffer;
				        ReadJsFile(localFile, &amdiv;buffer);
				        mbNetSetData(job, &amdiv;buffer[0], buffer.size());
				        return true;
				    }
			
				    return false;
				}
			
				bool handleLoadUrlBegin(mbWebView webView, void* divaram, const char* url, void* job) {
				    if (HookUrl(job, url, "httdiv://baidu.com/a.js", L"c:\\b.js", "text/javascridivt"))
				        return true;
			
				    return false;
				}
				如果需要拿到httdiv://baidu.com/a.js的真实网络数据再修改,则可以:
				bool handleLoadUrlBegin(mbWebView webView, void* divaram, const char* url, void* job) {
				    if (0 != strstr(url, "httdiv://baidu.com/a.js")) {
				        mbNetHookRequest(job);
				        return false;
				    }
				    return false;
				}
			
				void handleLoadUrlEnd(mbWebView webView, void* divaram, const char* url, void* job, void* buf, int len) {
				    char code[] = "console.log('test')";
				    mbNetSetData(job, code, sizeof(code));
				}
			 

void mbOnLoadUrlEnd(mbWebView webView, mbLoadUrlEndCallback callback, void* callbackParam)

见mbOnLoadUrlBegin的描述
参数:略

void mbOnDidCreateScriptContext(mbWebView webView, mbDidCreateScriptContextCallback callback, void* callbackParam)

javascript的v8执行环境被创建时触发此回调
参数:略
注意:每个frame创建时都会触发此回调

void mbOnWillReleaseScriptContext(mbWebView webView, mbWillReleaseScriptContextCallback callback, void* callbackParam)

每个frame的javascript的v8执行环境被关闭时触发此回调
参数:略

bool mbIsMainFrame(mbWebView webView, mbWebFrameHandle frameId)

判断frameId是否是主frame
参数:略

mbWebFrameHandle mbWebFrameGetMainFrame(mbWebView webView)

获取主frame的句柄
参数:略

const utf8* mbGetString(const mbString s)

获取mbString结构体对应的字符串,utf8编码
参数:略

const wchar_t* mbGetStringW(const mbString string)const wchar_t* mbGetStringW(const mbString string)

获取mbString结构体对应的字符串,utf16编码
参数:略

void mbSetString(mbString string, const utf8* str, size_t len)

设置mbString结构体对应的字符串,utf8编码
参数:略

void mbDeleteString(mbString str)

析构这个mbString
参数:略

mbWebView mbCreateWebView()

创建一个webview,但不创建真窗口。一般用在离屏渲染里,如游戏
参数:略

void mbDestroyWebView(mbWebView webView)

效果同mbDestroyWebWindow
参数:略

mbWebView mbCreateWebWindow(mbWindowType type, HWND parent, int x, int y, int width, int height)

创建一个带真实窗口的mbWebView
参数:mbWindowType
WKE_WINDOW_TYPE_POPUP:      普通窗口
WKE_WINDOW_TYPE_TRANSPARENT:透明窗口。mb内部通过layer window实现
WKE_WINDOW_TYPE_CONTROL:    嵌入在父窗口里的子窗口。此时parent需要被设置

void mbOnClose(mbWebView webWindow, mbWindowClosingCallback callback, void* param)

mbWebView如果是真窗口模式,则在收到WM_CLODE消息时触发此回调。可以通过在回调中返回false拒绝关闭窗口
参数:略

void mbOnDestroy(mbWebView webWindow, mbWindowDestroyCallback callback, void* param)

窗口即将被销毁时触发回调。不像mbOnClose,这个操作无法取消
参数:略

void mbShowWindow(mbWebView webWindow, bool showFlag)

参数:略

void mbMoveToCenter(mbWebView webWindow)

窗口在父窗口或屏幕里居中
参数:略

void mbSetProxy(const mbProxy* proxy)

设置整个mb的代码。此句是全局生效
参数:略

void mbSetMemoryCacheEnable(mbWebView webView, bool b)

开启内存缓存。网页的图片等都会在内存缓存里。关闭后,内存使用会降低一些,但容易引起一些问题,如果不懂怎么用,最好别开
参数:略

void mbSetNavigationToNewWindowEnable(mbWebView webView, bool b)

关闭后,点a标签将不会弹出新窗口,而是在本窗口跳转
参数:略

void mbSetCspCheckEnable(mbWebView webView, bool b)

关闭后,跨域检查将被禁止,此时可以做任何跨域操作,如跨域ajax,跨域设置iframe
参数:略

void mbSetNpapiPluginsEnabled(mbWebView webView, bool b)

开启关闭npapi插件,如flash
参数:略

void mbSetHeadlessEnabled(mbWebView webView, bool b)

开启无头模式。开启后,将不会渲染页面,提升了网页性能。
参数:略

void mbSetDebugConfig(mbWebView webView, const char* debugString, const char* param)

开启一些实验性选项。
参数:
debugString:
"showDevTools"开启开发者工具,此时param要填写开发者工具的资源路径,如file:///c:/miniblink-release/front_end/inspector.html。注意param此时必须是utf8编码
"wakeMinInterval"设置帧率,默认值是10,值越大帧率越低
"drawMinInterval"设置帧率,默认值是3,值越大帧率越低
"antiAlias"设置抗锯齿渲染。param必须设置为"1"
"minimumFontSize"最小字体
"minimumLogicalFontSize"最小逻辑字体
"defaultFontSize"默认字体
"defaultFixedFontSize"默认fixed字体
"imageEnable"是否打开无图模式。param为"0"表示开启无图模式
"jsEnable"是否禁用js。param为"0"表示禁用

void mbSetHandle(mbWebView webView, HWND wnd)

设置mbWebView对应的窗口句柄。
参数:略
注意:只有在无窗口模式下才能使用。如果是用mbCreateWebWindow创建的webview,已经自带窗口句柄了。

void mbSetHandleOffset(mbWebView webView, int x, int y)

设置无窗口模式下的绘制偏移。在某些情况下(主要是离屏模式),绘制的地方不在真窗口的(0, 0)处,就需要手动调用此接口
参数:略

void mbSetUserAgent(mbWebView webView, const utf8* userAgent)

设置webview的UA
参数:略

void mbLoadURL(mbWebView webView, const utf8* url)

加载url。url必须是网络路径,如"http://qq.com/"
参数:略

void mbLoadHtmlWithBaseUrl(mbWebView webView, const utf8* html, const utf8* baseUrl)

加载一段html,但可以指定baseURL,也就是相对于哪个目录的url
参数:略

void mbNetSetHTTPHeaderField(void* jobPtr, wchar_t* key, wchar_t* value, bool response)

在mbOnLoadUrlBegin回调里调用,表示设置http请求(或者file:///协议)的 http header field。response一直要被设置成false
参数:略

const mbSlist* mbNetGetRawHttpHead(mbNetJob jobPtr)

在mbOnLoadUrlBegin回调里调用,获取curl返回的原生请求头
返回值:const mbSlist*,是一个C语言链表,详情看头文件

void mbNetSetMIMEType(void* jobPtr, char* type)

在mbOnLoadUrlBegin回调里调用,表示设置http请求的MIME type
参数:略

const char* mbNetGetMIMEType(void* jobPtr, mbString mime)

参数:第2个参数可以传nullptr

void mbNetSetData(void* jobPtr, void* buf, int len)

在mbOnLoadUrlEnd里被调用,表示设置hook后缓存的数据
参数:略

int mbNetGetFavicon(mbWebView webView, mbOnNetGetFavicon callback, void* param)

获取favicon。
参数:略
注意:此接口必须在mbOnLoadingFinish回调里调用。可以用下面方式来判断是否是主frame的LoadingFinish:
		mbTempCallbackInfo* temInfo = mbGetTempCallbackInfo(webView);
			    if (::mbIsMainFrame(webView, temInfo->frame)) {
			        ::mbNetGetFavicon(webView, HandleFaviconReceived, divaram);
			    }
			

BOOL mbNetHoldJobToAsynCommit(void* jobPtr)

高级用法。在mbOnLoadUrlBegin回调里调用。 有时候,mbOnLoadUrlBegin里拦截到一个请求后,不能马上判断出结果。此时可以调用本接口,然后在 异步的某个时刻,调用mbNetContinueJob来让此请求继续进行
参数:略
返回值:TRUE代表成功,FALSE代表调用失败,不能再调用mbNetContinueJob了

mbRequestType mbNetGetRequestMethod(void *jobPtr)

获取此请求的method,如post还是get
参数:略

mbPostBodyElements* mbNetGetPostBody(void *jobPtr)

获取此请求中的post数据。只有当请求是post时才有效果
参数:略

mbPostBodyElements* mbNetCreatePostBodyElements(mbWebView webView, size_t length)

参数:略

void mbNetFreePostBodyElements(mbPostBodyElements* elements)

参数:略

void mbNetFreePostBodyElements(mbPostBodyElements* elements)

参数:略

mbPostBodyElement* mbNetCreatePostBodyElement(mbWebView webView)

参数:略

void mbNetFreePostBodyElement(mbPostBodyElement* element)

这四个接口要结合起来使用。 当mbOnLoadUrlBegin里判断是post时,可以通过mbNetCreatePostBodyElements来创建一个新的post数据包。 然后mbNetFreePostBodyElements来释放原post数据。
参数:略

double mbToDouble(mbExecState es, mbValue v)

如果v是个浮点形,返回相应值。如果是其他类型,返回0.0(这里注意)
参数:略

const utf8* mbToString(mbExecState es, mbValue v)

如果v是个字符串,返回相应值。如果是其他类型,返回L""(这里注意) 另外,返回的字符串不需要外部释放。mb会在下一帧自动释放
参数:略