从那里下载Cef3的资源? Cef3的各个版本下载地址:https://bitbucket.org/chromiumembedded/cef。这个地址不用翻墙就可以下载,但都是最近的版本,老版本的下载地址已经找不到了… 最后一个支持windowsXP的版本是3.2623,我用的也是这个版本。下载地址在这里:http://pan.baidu.com/s/1jIgLoaU。 debug版本的资源有七百多兆,需要的朋友可以联系我。 怎么在windows上编译cef3? 下载一个Cmake工具即可轻松生成sln文件,打开编译即可,可能会报错编译不通过,将警告视为错误选项修改为 否即可,这里默认是将警告视为错误的; 打开解决方案资源管理器如图所示: libcef_dll_wrapper 是在讲libcef的C接口做了一个C++的封装,我们调用的时候使用的将是libcef_dll_wrapper的C++接口,cefsimple是cef3嵌入到MFC的一个简单实例,cefclient则是一个全面的Cef3的功能实现,我们自己开发功能的时候也多是参照这个工程来改,但更具体的实现还是需要自己动手。关于怎么在windows上配置Cef3的这个工程,网上的资料多如牛毛,我这里就不再累赘了。我这里里主要讲解如何将Cef3内嵌浏览器的功能封装成一个Duilib的浏览器空间来使用,实现了有关接口回调到最上层应用,C++和浏览器的js相互调用等功能,具体如何,各位看官长眼: 想在自己的工程中添加Cef浏览器,首先要在程序入口处调用Cef的初始化操作,我们将这个接口封装到静态函数中,以保证在main函数中就能调用到;
//高DPI支持 CefEnableHighDPISupport(); //没有实现沙箱 void* sandbox_info = NULL; CefMainArgs main_args(hInstance); CefRefPtr<CefCommandLine> command_line = CefCommandLine::CreateCommandLine(); command_line->InitFromString(::GetCommandLineW()); if (!PathIsDirectory(cache_path.ToWString().c_str())) { SHCreateDirectory(NULL, cache_path.ToWString().c_str()); } if (!PathIsDirectory(log_file.ToWString().c_str())) { SHCreateDirectory(NULL, log_file.ToWString().c_str()); } //不同进程创建不同的app CefRefPtr<CefApp> app; reeiss_cef::ProcessType process_type = ClientApp::GetProcessType(command_line); if (process_type == reeiss_cef::BrowserProcess) { app = new ClientAppBrowser(); } else { return false; } //这里是对Cef的一些全局设置 CefSettings settings; CefSettingsTraits::init(&settings); //这个设置能实现单进程运行Cef浏览器插件,我们实际应用中采用的是双进程模式,即一个主进程,一个render渲染进程 //settings.single_process = true;settings.no_sandbox = true; //设置渲染进程的名称,因为在相同目录下,没有指定路径 CefString(&settings.browser_subprocess_path).FromWString(L"Render.exe"); //禁用Cef的消息循环,采用DuiLib的消息循环 settings.multi_threaded_message_loop = true; //设置本地语言 CefString(&settings.locale).FromWString(L"zh-CN"); //缓存数据路径 CefString(&settings.cache_path).FromWString(cache_path); //debug日志路径 CefString(&settings.log_file).FromWString(log_file); //初始化cef的全局操作 CefInitialize(main_args, settings, app.get(), sandbox_info); return true;当程序结束运行时,需要调用CefShutdown();接口来释放资源,如果没有调用这个的话,可能会出现进程假死的状态,将这两个接口放在一起,在main函数开始时调用初始化,在结束处调用关闭,即可安全的在程序中创建浏览器控件了。