cefquery方式交互
前端使用
window.cefQuery({
request: 'checkProductID', 请求名作为标识
persistent: false,
onSuccess: this.checkLicenseSucess,
onFailure: this.checkLicenseFailure
});
cef端处理:OnQuery
if (message_name == kMessageCheckLicense) {
MainContext::Get()->GetLicenseCheckHandler()->checkProduct(callback);
}
class Callback : public CefBaseRefCounted {
public:
virtual void Success(const CefString& response) = 0;
virtual void Failure(int error_code, const CefString& error_message) = 0;
};
cef注册函数:
注册全局变量只需1.2步即可即注册使用
1、OnWebKitInitialized 或 OnContextCreated 中初始化时进行函数注册
CefRefPtr<CefV8Value> func_max = CefV8Value::CreateFunction("checkNormDBRegister", m_handler);
object->SetValue("checkNormDBRegister", func_max, V8_PROPERTY_ATTRIBUTE_NONE);
2、js端调用
window.checkNormDBRegister
3、cef响应处理
if (name == "checkNormDBRegister")
{
if (arguments.size() == 3 && arguments[1]->IsFunction() && arguments[2]->IsFunction())
{
CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("checkNormDBRegister");
CefRefPtr<CefListValue> args = msg->GetArgumentList();
CefRefPtr<CefV8Value> value = arguments[0];
m_callback_regis_normdb_sucess = arguments[1];
m_callback_regis_normdb_fail = arguments[2];
m_context = CefV8Context::GetCurrentContext();
args->SetString(0, value->GetStringValue());
auto browser = CefV8Context::GetCurrentContext()->GetBrowser();
browser->SendProcessMessage(PID_BROWSER, msg);
return true;
}
}
4、浏览器收到消息处理
if (message_name == "checkNormDBRegister")
{
CefRefPtr<CefListValue> args = message->GetArgumentList();
CefString record = args->GetString(0);
std::string sAllDBIDs = record.ToString();
std::string sRegistered;
if (MainContext::Get()->GetGLDLicenseCheckHandler()->checkNormDBValid(sAllDBIDs, sRegistered) ) {
CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("checkNormDBRegister");
CefRefPtr<CefListValue> args_ = msg->GetArgumentList();
CefString sDBIDs(sRegistered);
args_->SetString(0, sDBIDs);
browser->SendProcessMessage(PID_RENDERER, msg);
}
}
5、渲染进程收到处理结果进行回调处理
if (message_name == "checkNormDBRegister")
{
CefRefPtr<CefListValue> args = message->GetArgumentList();
CefString record = args->GetString(0);
if (record.empty())
{
m_handler->executeNormDb_CallBack_Fail();
}
else
{
m_handler->executeNormDb_CallBack_Sucess(record);
}
}
6.回调具体调用
void executeNormDb_CallBack_Sucess(const CefString& data)
{
m_context->Enter();
CefV8ValueList args;
args.push_back(CefV8Value::CreateString(data));
m_callback_regis_normdb_sucess->ExecuteFunction(NULL, args);
m_context->Exit();
}