Miniblink 入门
miniblink官网:入门之前强烈建议将Miniblink介绍仔细看一遍。
MB内核组件标准版接口文档:这里列举了所有的api以及简单的说明,但是本人建议还是看wke.h更方便,里面都是宏实现的,直接搜相关函数即可。
mb demo下载和参考:里面有说明文档,初步可以看看文档和运行了解一下。
miniblink概括
- miniblink是单进程程序与cef多进程相比简单很多。
- mini 包很小,方便集成
- 为了使用devTool,应该将mb demo目录下的
front_end
拷贝到工程一份 - 为了使用插件,应该将mb demo目录下的
plugins
拷贝到工程一份
js 调用C++函数并返回值
- 遵循
WKE_CALL_TYPE
调用方式 - 遵循函数原型
jsValue WKE_CALL_TYPE xxxFun(jsExecState es, void* param)
//函数标准必须遵守WKE_CALL_TYPE 调用方式
jsValue WKE_CALL_TYPE OnMsg(jsExecState es, void* param)
{//获取参数个数jsArgCountif (0 == jsArgCount(es))return jsUndefined();//获取约定的参数,例如获取第一个参数,并假设参数为string,如果不是string则返回jsValue arg0 = jsArg(es, 0);//jsType type = jsArgType(es, 0);//if (JSTYPE_STRING != type) return jsUndefined();if (!jsIsString(arg0))return jsUndefined();path = jsToTempString(es, arg0);//同理获取更多参数//返回约定返回值 or Undefined//return jsStringW(L"OK");return jsInt();
}
- js绑定C++函数
#param1:js中调用的函数名称
#param2:c++中实现的的函数
#param3:自定义参数,对应OnMsg中的void* param
#param4:约定onMsg中需要输入的参数个数,可多但是不能少#该函数是全局的,绑定之后所有webview的js都可以调用eMsg,包括新打开的webview
wkeJsBindFunction("eMsg", &onMsg, nullptr, 5);
- js中调用绑定函数
<button onclick="eMsg('add')">js Call C++ function</button>
c++ 调用js函数并获取返回值
- js中声明函数,eg:
js_add
function js_add(v1,v2){return v1 + v2;}
- C++通过
jsCallGlobal
调用js_add
int callJSAdd(wkeWebView webview)
{jsExecState es = wkeGlobalExec(webview);jsValue f = jsGetGlobal(es, "js_add");if (jsIsFunction(f)){return -1;}jsValue jVal[2];jVal[0] = jsInt(1);jVal[1] = jsInt(2);jsValue callRet = jsCallGlobal(es, f, jVal, 2);return jsToInt(es, callRet);
}
显示DevTool
#param1:wkeWebView 实例
#param2:调试器的路径,即front_end/inspector.htmlwkeShowDevtools(m_wkWebView, szPath, 0, 0);
void CMbWebView::ShowDevTool()
{wchar_t szPath[MAX_PATH] = _T("");GetModuleFileNameW(NULL, szPath, MAX_PATH);PathRemoveFileSpecW(szPath);PathAppendW(szPath, L"front_end");PathAppendW(szPath, L"inspector.html");if (_waccess(szPath, 00) != 0){wchar_t szBuf[1024] = L"";_snwprintf_s<1024>(szBuf, 1024, L"调试工具[%s]不存在", szPath);MessageBoxW(GetHwnd(), szBuf, L"错误提示", MB_OK);}else{wkeShowDevtools(m_wkWebView, szPath, 0, 0);}
}
其他的更多功能直接参考官方的mb demo
。