Cef功能开发经验总结

2020-02-22 11:11

Cef功能开发经验总结

Cef功能开发经验总结2017-04-14 12:54 2072人阅读 评论(0) 收藏

举报分类:Windows(110)C/C++(105)

javascript/vbs/lua/python(39)http/ftp/IE/Chrome/Firefox(43)网络(66)WTL/MFC(3)目录(?)[+]

转载请说明原出处,谢谢~~:

http://blog.csdn.net/zhuhongshu/article/details/70159672

这是我开发Cef功能时对踩过的坑,进行的总结,话说Cef坑真的不少。好在踩完后用起来还是挺爽的。最终的代码可以下载网易云信PC Demo点我跳转

资料准备

这是我集成过程中查到的一些资料,包括了Cef开发的各方面资料

在调试Cef时需要Cef的pdb和源码:

Cef及pdb文件下载地址,其中的CefClient包含了Cef绝大多数功能的示例:https://cefbuilds.com/Cef及对应Chromiun源码下载地址:

http://opensource.spotify.com/cefbuilds/index.htmlCef与JS交互:

http://blog.csdn.net/foruok/article/details/50573612Cef与JS交互二:

http://www.cnblogs.com/guolixiucai/p/4943748.htmlCef官方文档中文翻译版,包含了Cef导读(这个导读是很重要的资料)和一些经验文档,很有用:https://github.com/fanfeilong/cefutil

Cef基本结构

CefApp接口

CefApp接口提供了不同进程的可定制回调函数,每一个进程对应一个CefApp接口。CefBrowserProcessHandler对应浏览器进程的回调,CefRenderProcessHandler对应渲染进程的回调。我们应该继承CefApp、

CefBrowserProcessHandler、CefRenderProcessHandler

接口。如果完全使用多进程模式,可以分别在浏览器进程和渲染进程里分开继承接口

CefApp::OnBeforeCommandLineProcessing方法里可以附加传入给Cef的命令行参数,这里可以附加很多控制参数

CefRenderProcessHandler::OnWebKitInitialized方法可以在渲染进程初始化时用来注册js扩展代码,实现C++与JS交互

CefRenderProcessHandler::OnFocusedNodeChanged方法可以检测当前获取到焦点html元素,获取到一些元素信息可以通过进程通信发送给浏览器进程来辅助做进一步的判断

CefRenderProcessHandler::OnProcessMessageReceived方法用于接收浏览器进程发来的消息,在做C++与JS交互时会用到

CefClient接口

每一个CefBrowser对象会对应一个CefClient接口,用于处

理浏览器页面的各种回调信息,包括了Browser的生命周期,右键菜单,对话框,状态通知显示,下载事件,拖曳事件,焦点事件,键盘事件,离屏渲染事件。随着Cef版本的更新这些接口也会扩展和更新,多数对Cef进行行为控制的方法都集中在这些接口,如果对Cef有新的功能需求,一般都可以先翻翻这些接口中有没有提供相关功能

CefClient::OnProcessMessageReceived方法用于接收渲染进程发到的消息,在做C++与JS交互时会用到

CefSettings结构体

CefSettings结构体定义了Cef的全局配置信息,比如指定单进程模式、指定渲染子进程路径、设置localstorage路径、设置日志等级、Cef资源文件路径。其中对于项目最重要的字段是single_process、multi_threaded_message_loop、windowless_rendering_enabled,分别用于指定单进程模式、多线程渲染模式、离屏渲染模式。

兼容现有的消息循环

如果是UI线程消息循环构架较简单的项目,可以直接调用

CefRunMessageLoop来使用Cef自带的消息循环,它会阻塞线程直到调用了CefQuitMessageLoop函数,

CefRunMessageLoop是兼容传统的Win32消息循环的。

不过NIM项目底层是使用谷歌base库的多线程构架,所以没法直接使用CefRunMessageLoop。(PS:实际上Cef的底层消息循环也是谷歌的base库)

要让NIM的消息循环兼容Cef消息循环,有两种方法。

第一种方法

第一种方法是使用CefDoMessageLoopWork函数代替CefRunMessageLoop来完全消息消息循环。

CefDoMessageLoopWork函数的作用是让Cef执行一次消息循环,这个函数不会阻塞线程,所以需要在我们现有的消息循环里的适当情况下主动去调用

CefDoMessageLoopWork函数,如果调用的太频繁会很消耗CPU,如果调用频率太低会导致Cef来不及处理内部消息,让Cef界面反映变慢,所以这个函数的调用时机很重要。

因为CefDoMessageLoopWork函数应该在原本的消息循环


Cef功能开发经验总结.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:甬教研2008110号

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: