分享

Cef 实践总结

 猎狐肥 2020-01-03

在实际项目过程中,我们使用cef和C++交互,肯定不可能像之前文章demo那么简答。但是C++是强类型管理,如果我们按照C++ dll标准规范定义接口,那么将导致我们每次扩展功能的时候都需要修改Cef相关模块。这样会导致维护和扩展性变差。所以定义接口的时候我们需要预定一些条例和规则,然后双方按照规则来。

例如(本例多标签浏览器)我们做了如下约定( CJSHandler::Execute实现约定):

函数调用:
1.如果需要设置函数回调,则把第一个参数指定为回调函数。
2.如果第一个参数不是回调函数则调用全局的回调函数:js_handler_call_back

所有请求异步处理。此时我们会进行数据打标投递到Browser进程。
参数列表:
CefMsg名称:JS_CALLBACK_FLAG
参数[0] - 调用函数名称。
参数[1] - 注册回调id,如果全局回调则为-1。
参数[2] - N:打包函数调用的请求参数。

Browser进程处理Msg,处理完成之后投递到Render进程。
1 - Msgname永远原值返回。
2 - 如果Msgname=JS_CALLBACK_FLAG,则将参数0和参数1原值返回。
3 - 参数3处理结果的Json字符串(json格式自行约定)。

消息处理流程:
Render=>Browser=>MainFram=>Render=》回调数据

当然在实际过程中我们应该根据自己的应用场景合理的定制协议约定,这样的话web端,C++端就可以很好的根据协议处理各自业务。(具体可参考demo)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多