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)
{
//获取参数个数jsArgCount
if (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
#注意第三个参数void* param,如果默认和当前创建的webview绑定
#如果当前webview不调用wkeJsBindFunction,则继承上一次的wkeJsBindFunction调用
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.html
wkeShowDevtools(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
。