標籤:

miniblink介面使用文檔

miniblink介面使用文檔

來自專欄盟主來了16 人贊了文章

前言

miniblink使用了wke的介面。wke的相關介紹可以google一下。

總的來說,miniblink的介面是純C導出,只要使用wke.h即可載入。無需.lib

介面使用的是__cdecl調用約定

unsigned int wkeVersion();

獲取目前api版本號

const utf8* wkeVersionString();

獲取版本字元串

void wkeSetWkeDllPath(const wchar_t* dllPath)

設置miniblink的全路徑+文件名

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:mbcookie.dat」

void wkeSetLocalStorageFullPath(wkeWebView webView, const WCHAR* path)

設置local storage的全路徑。如「c:mbLocalStorage」

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:見msdn.microsoft.com/en-u.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.見msdn.microsoft.com/en-u.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(如baidu.com/a.js),替換為本地c:.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;}

如果需要拿到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 wkeCreateWebView()

創建一個webview,但不創建真窗口。一般用在離屏渲染里,如遊戲

void wkeDestroyWebView(wkeWebView webView)

效果同wkeDestroyWebWindow

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)

關閉後,點<a>標籤將不會彈出新窗口,而是在本窗口跳轉

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必須是網路路徑,如"騰訊首頁"

void wkeLoadW(wkeWebView webView, const wchar_t* url)

void wkeLoadHTML(wkeWebView webView, const utf8* html)

載入一段html,如"<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 wkeNetSetURL(void* jobPtr, const char* url)

在wkeOnLoadUrlBegin中調用。可以修改一個網路請求的url。

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上。

使用示例:

c++里:

--------

jsValue JS_CALL onNativeFunction(jsExecState es) { jsValue v = jsArg(es, 0); const wchar_t* str = jsToTempStringW(es, v); OutputdebugStringW(str);}jsBindFunction("testCall", onNativeFunction, 1);

js里:

--------

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指針。


推薦閱讀:

六祖大師法寶壇經(文檔G)
WORD文檔DOC轉PDF
文檔對象模型(DOM
膏藥製作大全視頻 文檔
如何使英文Windows7系統正常顯示中文文檔

TAG:文檔 | 科技 |