【转】MFC内嵌cef3浏览器内核

一、cef3内核的下载

可以从http://opensource.spotify.com/cefbuilds/index.html下载,注意:很多版本编译都可以通过 但是运行的时候会崩溃,以cef_binary_3.2704.1414.g185cd6c_windows32为例,该版本debug编译都可以通过,运行的时候加载本地网页会出现错误,原因未知,加载www.baidu.com,关闭的时候会出现崩溃的情况,release版本完全正常,

二、使用cmake创建成vs工程

本文创建为vs2015,

打开vs工程文件,,编译libcef_all_wrapper,另外编译自带cefsimple,从libcef_dll_wrapper文件下的生成目录debug或者release获取libcef_dll_wrapper.lib,另外要把cefsimple需要的依赖都拷出来,后面作为我们demo必要的依赖。

三、cef相关文件夹介绍

文件夹介绍

(1)cmake,该文件夹包含Cmake的一些宏定义,配置信息。

(2)include,使用该库的所有头文件

(3)libcef_dll,库的源代码

(4)tests,测试程序demo源代码

(5)Resource,资源文件

该资源文件是程序运行需要依赖的资源文件,含语言包,unicode支持等

(6)Debug/Release,程序依赖的动态库/静态库。但不包括C++库:libcef_dll_wrapper.lib。

1、必须文件,缺少任意一个CEF将无法运行:
libcef.dll
    这个不用多说,CEF的核心库文件,js引擎、网页加载渲染逻辑等都在其中,也是size最大的一个文件(Release版将近50M,Debug版超过500M)。
icudtl.dat 
    用来支持unicode,缺少这些文件虽然编译能通过,但是执行CefInitialize();的时候就会崩溃,在这个坑趴了很久还以为是代码问题。
natives_blob.bin
snapshot_blob.bin
    V8引擎快照数据。
2、可选文件:
locales/
    该目录包含CEF,Chromium和Blink使用的本地化资源。 CefSettings.locale指定需要加载的.pak文件。 只需要发布配置的区域对应的.pak文件。

如果没有区域设置将配置默认语言环境“en-US”。如果没有这些文件任意Web组件可能显示不正确。
cef.pak
cef_100_percent.pak
cef_200_percent.pak
    这些文件包含了供CEF使用的区域无关资源,缺少这些文件任意Web组件可能显示不正确。(笔者当时缺少cef_100_percent.pak,

cef_200_percent.pak两文件,导致视频控件不显示音量和最大化按钮)。
cef_extensions.pak

此文件包含扩展加载所需的非本地化资源传递`--disable-extensions`命令行标志来禁止使用文件。没有这个文件,依赖于扩展系统的组件将不起作用,如PDF查看器。

devtools_resources.pak

此文件包含Chrome开发者工具所需的非本地化资源,缺少这个文件,Chrome开发者工具将无法运行。
d3dcompiler_43.dll (Windows XP需要该文件)
d3dcompiler_47.dll (Windows Vista和更高版本的系统需要该文件)
libEGL.dll
libGLESv2.dll
    Direct3D支持文件,如果缺少这些文件,HTML5在渲染2D画布,3D CSS,WebGL时将不起作用。
wow_helper.exe

用来支持Windows Vista 64位沙箱。如果没有这个文件,32位的CEF将无法在开启了沙箱的64位的Vista机器上运行。

四、测试demo的创建

1、创建mfc对话框工程,将cef_sandbox.lib、libcef.lib、libcef_dll_wrapper.lib拷到项目中,并添加相应依赖,将源码中的include文件夹添加到项目中。

2、将本人上传的的文件资源http://download.csdn.net/download/venice0708/10272163下载并添加到工程中,作为后面c++调用js和JS调用c++的依赖。

3、创建CTestWeb继承IWebEventCallBackBase。

4、在BOOL CnewCef3DemoDlg::OnInitDialog(),添加

[cpp] view plain copy

print?


关闭的时候需要调用GetCefInstance()->ExitInstance();

五、c++调用js

在本人的依赖中有 GetCefInstance()->RunJS(pTestWeb->GetWebID(), L"sendMessage", 1, JsDataStr.GetBuffer());

第一个参数为该网页的ID号,第二个为js的函数名,第三个为总的参数个数,第四个为参数,详情请看源代码。

六、JS调用c++

在上文的依赖代码中需要进行c++函数的注册

在js代码中只需要CallWkeWebkit("CCjsCallCpp", "666");即可,详细的可以参照一些网友的做法。

本文只要是写了一些项目中研究的大体思路,方便以后查阅,类似的博文网上很多,详细可以参考其他网友的!

from:https://blog.csdn.net/venice0708/article/details/79461129

原文地址:https://www.cnblogs.com/xuan52rock/p/9772314.html

时间: 2024-07-29 07:47:08

【转】MFC内嵌cef3浏览器内核的相关文章

MFC内嵌浏览器步骤

先把浏览器控件添加到工具栏中 一.添加类 二.从ActiveX控件添加类向导 三.选择Microsoft Web Browser

WinForm使用CefSharp内嵌chrome浏览器

先贴运行图:亲测可用!以图为证! 开始!1.创建winform程序,使用.NET 4.5.2或以上(vs2010最高支持.NET 4.0,我使用的是vs2017).这一步容易忽略,简单的说就是将项目.net版本改为4.5.2或以上否则下面即使引用了dll也是报错的 2.在解决方案上右键->"属性"->"生成"->"目标平台",选择x86或x64,Cef暂不支持"Any CPU". 3.下载并解压CefShar

IE内嵌google chrome frame解决浏览器兼容问题

IE内嵌google chrome frame解决浏览器兼容问题 http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参考文献: http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的header) http://www.baike.com/wiki/Google+Chrome+Frame(goo

cocos2d-x调用android内嵌浏览器打开网页

cocos2d-x调用android内嵌浏览器打开网页,可以从入口传入网址,C++调用android 的api即可实现.方法也很简单 1. 修改"cocos2dx\platform\win32"下的CCApplication.h和CCApplication.cpp,添加函数 头文件声明 void openURL(const char* pszUrl); cpp文件实现: void CCApplication::openURL(const char* pszUrl) { ShellExe

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

使用Windows安装的最高版本IE内核加载内嵌页(转载)

客户端程序内嵌Webbrowser控件时,默认情况都是使用IE7兼容模式打开网页的.但是IE7有很多新的特性不支持,导致无法正常显示出来,所以需要强制使用高版本的IE内核来加载.渲染. 1 void ChangeRegedit(const wchar_t* pExeName) 2 { 3 if ( NULL == pExeName ) 4 return ; 5 TCHAR szVersion[64] = {0}; 6 DWORD dwSize = 64; 7 HKEY hKey; 8 // 先获

Jcef内嵌浏览器windows版本的编译及使用

背景 去年年底接到的新需求,需要将原来用Swing做的桌面应用中的一个功能做成Web版的,并且要集成到原应用中,换言之就是要使用内嵌浏览器.最开始考虑的是JavaFx提供的WebView,优点是不需要其他第三方库,jdk1.7开始集成.但是开发完成之后发现两个比较严重的问题,一是界面有一个比较复杂的曲线图会严重卡顿,另一个是有几率会导致虚拟机崩溃,并且速度上也不是很让人满意.最后只能考虑换一个内嵌浏览器框架,然后就找到jcef,基于chrome,速度兼容性都很好. 关于jcef就不多作介绍,不了

Chrome浏览器内嵌的各种手机模拟器

打开chrome的控制台标签,然后,点击simulator子标签页,选择需要的手机即可,如下图: 模拟器如下: 阅读原文:Chrome浏览器内嵌的各种手机模拟器

魔改——MFC SDI 支持 内嵌 EXCEL OLE

==================================声明================================== 本文版权归作者所有 未经作者授权 请勿转载 保留法律追究的权利 本文原创,已获得转载授权的,必须在正文中显要地注明作者和出处,并保证文章(包括本声明)的完整性. 被授权人不可再次授权第三方. 未经作者授权请勿修改(包括本声明),保留法律追究的权利. 未经作者授权请勿用于学术性引用. 未经作者授权请勿用于商业出版.商业印刷.商业引用以及其他商业用途.