CefSharp .net

构建基于Chromium的应用程序

chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由 度,2013年google决定自己开发webcore的分支,叫做Blink引擎,而后google以BSD伯克利许可开源,BSD许可限制较为宽松, 很多浏览器都是基于chromium开发的,比如,此后省略100字。google在原有基础上做了进一步的精简优化,并开发出v8 javascript引擎,2010年google收购了webrtc技术随后开放了源代码,webrtc采用vp编码,兼容html5标准,同年 google推出了chrome os云操作系统,浏览器的衍生产品。

废话不多说,检索一下Chromium Embedded Framework,简称cef,你可以在cefbuilds上看到当前chromium最新放出的版本,也可以在google code上下载到,里面包括浏览器的核心库和底层api,支持c和c++的编程语言,另外也有第三方的包括.net/mono、java、python、 delphi等开源项目。

我们从google code下载win32的c++库,打开release文件夹。

这里面作个介绍:

libcef.dll:cef核心库。

icudt.dll:编码格式库。

ffmpegsumo.dll:视频解码器,包含vp8 vp9编码库。

d3dcompiler_43.dll、d3dcompiler_46.dll、libEGL.dll、libGLESv2.dll

这几个是3d图形的库,d3dcompiler_43.dll适用于xp,d3dcompiler_46适用于xp以上版本。

include文件夹里面是cef c++的头文件,可以去github下载.net调用的project,叫做cefsharp,提供了winform和wpf的完整demo。

CefSharp:封装是C#调用api的入口和数据接受类。

CefSharp.BrowserSubprocess:是.net写的一个伴随进程,主要负责处理javascript和后台线程。

CefSharp.BrowserSubprocess.Core:是一个c++的工程,需要引用到cef的c++头文件,主要是javascript相关操作。

CefSharp.Core:也是一个c++工程,包括cef的初始化配置、接受事件等。

CefSharp.Example:c#调用cef的初始化配置。

CefSharp.WinForm.Example:写了一个自定义控件,作为cef浏览器的窗口。

ChromimumWebBrowser.cs所有接口的实现可以放在这里面,详见cefsharp demo。

1 public class ChromiumWebBrowser : Control, IWebBrowserInternal, IWinFormsWebBrowser
2 {
3     ...
4 }

再加一个自定义控件BrowserUserControl。自定义一个构造函数。

 1 public BrowserUserControl(string url)
 2 {
 3     InitializeComponent();
 4
 5     var browser = new ChromiumWebBrowser(url)
 6     {
 7         Dock = DockStyle.Fill
 8     };
 9     this.Controls.Add(browser);
10 }

建立一个Form1启动窗口,添加创建的用户控件。

 1 public Form1()
 2 {
 3     InitializeComponent();
 4
 5     var browser = new BrowserUserControl(CefExample.DefaultUrl)
 6     {
 7         Dock = DockStyle.Fill,
 8     };
 9     browser.CreateControl();
10     this.Controls.Add(browser);
11 }

再来看一下Program.cs中的main方法入口,CefExample调用了一个Init初始化方法。

 1 /// <summary>
 2 /// The main entry point for the application.
 3 /// </summary>
 4 [STAThread]
 5 static void Main()
 6 {
 7     CefExample.Init();
 8
 9     Application.EnableVisualStyles();
10     Application.SetCompatibleTextRenderingDefault(false);
11     Application.Run(new Form1());
12 }

在CefSharp.Example工程中,defaulturl就是默认首页url地址。

 1 public static class CefExample
 2 {
 3     public const string DefaultUrl = "http://www.google.com/";
 4     private static readonly bool DebuggingSubProcess = Debugger.IsAttached;
 5
 6     public static void Init()
 7     {
 8         var settings = new CefSettings();
 9         settings.RemoteDebuggingPort = 8088;
10         settings.CefCommandLineArgs.Add("enable-media-stream", "enable-media-stream");
11         settings.IgnoreCertificateErrors = true;
12         settings.LogSeverity = LogSeverity.Verbose;
13
14         if(DebuggingSubProcess)
15         {
16             //var architecture = Environment.Is64BitProcess ? "x64" : "x86";
17             //settings.BrowserSubprocessPath = "..\\..\\..\\..\\CefSharp.BrowserSubprocess\\bin\\" + architecture + "\\Debug\\CefSharp.BrowserSubprocess.exe";
18         }
19
20         settings.RegisterScheme(new CefCustomScheme
21         {
22             SchemeName = CefSharpSchemeHandlerFactory.SchemeName,
23             SchemeHandlerFactory = new CefSharpSchemeHandlerFactory()
24         });
25
26         if (!Cef.Initialize(settings))
27         {
28             if (Environment.GetCommandLineArgs().Contains("--type=renderer"))
29             {
30                 Environment.Exit(0);
31             }
32             else
33             {
34                 return;
35             }
36         }
37     }
38 }

我们放一个release版本,里面大概有这些文件。locales里面放的本地化资源包,包括cef_100_percent/cef_200_percent,如果删掉,会出现诸如窗口滚动条外观异常等,degug.log会记录操作记录。

运行一下打开一个网页。

我们再写一个html页面。

 1 <!DOCTYPE html>
 2
 3 <html>
 4 <head>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 6     <meta id="viewport" name="viewport" content="width=device-width, initial-scale=1">
 7     <title></title>
 8 </head>
 9 <body>
10     <video autoplay></video>
11     <script>
12         ‘use strict‘;
13
14         var video = document.querySelector(‘video‘);
15         var constraints = {
16             audio: false,
17             video: true
18         };
19
20         navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
21           navigator.mozGetUserMedia;
22
23         function successCallback(stream) {
24             window.stream = stream;
25             if (window.URL) {
26                 video.src = window.URL.createObjectURL(stream);
27             } else {
28                 video.src = stream;
29             }
30         }
31
32         function errorCallback(error) {
33             console.log(‘navigator.getUserMedia error: ‘, error);
34         }
35
36         navigator.getUserMedia(constraints, successCallback, errorCallback);
37     </script>
38 </body>
39 </html>

修改CefExample的defaulturl指向这个页面。

有一点要注意,在CefCommandLineArgs添加了enable-media-stream参数,意思是开启chrome的媒体流。看下效果。

这里我们基于chromium内核使用到了html5 webrtc技术,页面开启了摄像头。

这里只是粗略的列了个小demo,还有比如一些基本的鼠标事件、页面重定向等功能,除此之外chromium很有功能api值得学习和挖掘。

libcef.dll:cef核心库。

icudt.dll:编码格式库。

ffmpegsumo.dll:视频解码器,包含vp8 vp9编码库。

d3dcompiler_43.dll、d3dcompiler_46.dll、libEGL.dll、libGLESv2.dll

这几个是3d图形的库,d3dcompiler_43.dll适用于xp,d3dcompiler_46适用于xp以上版本。

include文件夹里面是cef c++的头文件,可以去github下载.net调用的project,叫做cefsharp,提供了winform和wpf的完整demo。
CefSharp:封装是C#调用api的入口和数据接受类。

CefSharp.BrowserSubprocess:是.net写的一个伴随进程,主要负责处理javascript和后台线程。

CefSharp.BrowserSubprocess.Core:是一个c++的工程,需要引用到cef的c++头文件,主要是javascript相关操作。

CefSharp.Core:也是一个c++工程,包括cef的初始化配置、接受事件等。

CefSharp.Example:c#调用cef的初始化配置。

CefSharp.WinForm.Example:写了一个自定义控件,作为cef浏览器的窗口。

ChromimumWebBrowser.cs所有接口的实现可以放在这里面,详见cefsharp demo。

http://www.cnblogs.com/yuefei/p/4123597.html
1.创建项目
2.修改属性 目标平台X64
3.生成
3.复制文件到x64文件下
3.添加3个引用。生成
5.添加 xmln 命名空间
6.添加控件,生成

时间: 2024-10-17 02:12:00

CefSharp .net的相关文章

WPF使用cefsharp

最近在公司项目上会用到cefsharp.wpf,不知道为什么按照网上的配置一直无法运行成功,怎么配置可以参考以下这篇博文: http://www.cnblogs.com/TianFang/p/4573324.html 他的配置神马都是对的,为什么我在公司就一直运行不起来呢,各种百度.google,还是不行.后来到github上去下载(https://github.com/cefsharp/CefSharp)cefsharp的源代码,我用vs2010打开提示该工程是由更高版本的vs创建的,问题找到

cefSharp 设置运行时系统语言

在使用用CefSharp使用过程中,系统用了很多第三方控件.这些控件很多能够根据浏览器设置的语言来进行控件展示对应语言. 在cefSharp可以设置系统语言,代码如下: CefSharp.Settings setting = new CefSharp.Settings(); string flashPath = Application.StartupPath+ @"\Plug\gcswf32.dll"; setting.AddPluginPath(flashPath); //设置语言

在WPF中使用CefSharp嵌入浏览器

日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在WPF/WinForm客户端软件中使用它.CefSharp的代码托管在GitHub上,.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework. 目前最新版本的CefSharp是41.0版本,如果你的客户端软件

[Winform]CefSharp ——js调用c#方法

摘要 有时我们在winform中嵌入浏览器,需要在页面上读取电脑上的一些信息,这个时候就需要用到CefSharp的RegisterJsObject进行注册方法然后供js进行调用了. 一个例子 我们在winform中嵌入的页面中,显示电脑的信息,电脑信息通过winform进行读取,js调用获取电脑信息的方法,并将最终结果以json字符串的形式传递到js端,js获取到这些信息并在页面上进行显示. 定义一个专门处理js回调的类 /// <summary> /// js c#回调类 /// </

在 C# App 中嵌入 Chrome 浏览器使用 CefSharp

介绍 以前曾试过在app中整合一个可靠又快速的web浏览器吗? 在本文中,你会学到如何轻松地将奇妙的CefSharp网页浏览器组件(基于Chromium)集成到你的C# app中. 然后,你可以使用此web浏览器: 给用户提供一个集成的浏览体验 用HTML / JavaScript编程添加嵌入式界面 用于web自动化 CefSharp可靠,快速,完全开源,不需要任何额外的依赖就可以安装到最终用户(除VC ++ Runtime 2013以外). 在本指南中,我们将使用WinForms项目,但Cef

CefSharp&quot;Could not load file or assembly &#39;CefSharp.Core.dll&#39; or one of its dependencies&quot;

使用CefSharp时,在开发机没问题,在客户机出现“Could not load file or assembly 'CefSharp.Core.dll' or one of its dependencies"问题 但bin目录下又存在CefSharp.Core.dll文件,此问题是CefSharp是基于Vc++开发,因此必须要VC++运行时才能运行 解决办法:安装VC++ 2013 Redist或VC++ 2012 Redist(具体视CefSharp的版本) CefSharp"C

wpf 用cefsharp替代web控件

碰到了一个需求,采用WPF在地图上面放置按钮并可以透明,但是如果采用wpf的webBrowser的话,兼容性不是很好,虽然实现了在其上面放置控件,但是不能透明. 看了几篇博客,有的人说是因为IE的兼容性问题,换了个思路,不用IE的浏览器好不好?这样从网上找到了cefsharp控件,这是谷歌的一个控件,具体内容可以参考博文 http://www.cnblogs.com/TianFang/p/4573324.html  现在介绍Cefsharp的安装方法 首先:打开VS2013----工具-----

使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法

CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Opera等都是基于CEF为核心,Webkit引擎的浏览器. Xilium.CefGlue是对CEF项目的.net的包装,它是用P/Invoke的方式来调用CEF类库.CEFSharp是用C++/CLI的方式来调用CEF类库的. 原先使用的是Xilium.CefGlue,如果只是单纯在窗口上实现的话是没

CefSharp的引用、配置、实例

CefSharp的引用.配置.实例与报错排除(源码) Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfrom下CefSharp的基本使用,包括显示网页url/本地html显示.JavaScript调用异步C#方法.JavaScript调用带参数C#方法.JavaScript调用委托C#方法.JavaScript调用C#返回实体对象.ChromiumW