当前位置: 首页 > 工具软件 > miniblink > 使用案例 >

Miniblink 入门

乌翰学
2023-12-01

miniblink官网:入门之前强烈建议将Miniblink介绍仔细看一遍。

MB内核组件标准版接口文档:这里列举了所有的api以及简单的说明,但是本人建议还是看wke.h更方便,里面都是宏实现的,直接搜相关函数即可。

mb demo下载和参考:里面有说明文档,初步可以看看文档和运行了解一下。

miniblink概括

  1. miniblink是单进程程序与cef多进程相比简单很多。
  2. mini 包很小,方便集成
  3. 为了使用devTool,应该将mb demo目录下的front_end拷贝到工程一份
  4. 为了使用插件,应该将mb demo目录下的plugins拷贝到工程一份

js 调用C++函数并返回值

  1. 遵循WKE_CALL_TYPE 调用方式
  2. 遵循函数原型 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();
}
  1. 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);
  1. js中调用绑定函数
<button onclick="eMsg('add')">js Call C++ function</button>

c++ 调用js函数并获取返回值

  1. js中声明函数,eg:js_add
function js_add(v1,v2){
		return v1 + v2;
	}
  1. 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

 类似资料: