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对应的窗口句柄


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- ... 75731(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- ... 46276(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>,则调用此回调,并发送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, 点击<a>触发
    WKE_NAVIGATION_TYPE_FORMSUBMITTE,  点击form触发
    WKE_NAVIGATION_TYPE_BACKFORWARD, 前进后退触发
    WKE_NAVIGATION_TYPE_RELOAD, 重新加载触发
注意的是,wkeNavigationCallback回调的返回值,如果是true,表示可以继续进行浏览,false表示阻止本次浏览。


void wkeOnCreateView(wkeWebView webView, wkeCreateViewCallback callback, void* param)
网页点击<a>创建新窗口时将触发回调
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<char>* 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<char> 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
 

0 个评论

要回复文章请先登录注册