GoogleChromium与Chromium.Core库的开源项目Tracker
CefSharp是围绕Chromium嵌入式框架(Chromium Embedded Framework,CEF)的简单.Net包装器。CEF是一个基于Google Chromium项目的开源项目。与Chromium项目本身(主要专注于Google Chrome应用程序开发)不同,CEF专注于促进第三方应用程序中的嵌入式浏览器用例。CEF基于多进程Chromium Content API,因此,当前仅存在Chromium的部分功能。例如,对扩展的支持是有限的,仅实现了一部分Extension API。
CefSharp提供三种不同的类型WinForms,WPF和OffScreen。在WPF与OffScreen版本使用的OffScreen Rendering(OSR)渲染模式。在OSR模式中,每个帧被渲染到缓冲器,然后或者在屏幕上绘制作为的情况下WPF或可作为Bitmap在OffScreen。所有版本都使用CefSharp和CefSharp.Core库,因此API在这三种风格中,大部分使用的库都完全相同。这减少了代码重复并降低了添加新功能的维护负担,唯一的缺点是该WPF版本并不像它可能的那样友好(您可以将其ChromiumWebBrowser归类,并在应用程序中实现所需的任何缺少的部分)。您也可以托管WinFormsWPF使用中的版本号WindowsFormsHost,可能需要绕过该WPF版本的某些限制(CEF尚未在OSR模式中实现完全的触摸屏支持,在上存在一个开放问题CEF Issue Tracker,如果您需要这样做,请参与其中)。
发行说明
有关每个版本的发行说明,请访问,如果您有问题或对更改有所好奇,请抽出时间阅读它们。如果遇到问题,请查看“已知问题”部分,通常会有一些说明包含有关发行版的有用信息。
软件需求
CefSharp使用Visual C (VC )与本机C API交互,因此它只能在Windows上运行。(没有Windows APP Store版本)。CefSharp在每个第二Chromium版本上发布版本,例如47、49、51。每个CefSharp版本都有其自己的分支,有关每个分支的详细信息和要求,请参见。Google最近去除了对较早的操作系统的支持,例如Windows XP,Vista及其服务器版本。如果您要求您的应用程序在这些操作系统上运行,请查看发行版以获取更多详细信息
CefSharp要求:
笔记:
任何CPU支持
较新的版本现在支持定位AnyCPU,有关如何实现此功能的详细信息,请参见。可以使用相同的技术将libcef.dll等等移动到磁盘上的其他文件夹或公共位置。
需要知道/限制例子
CefSharp源代码包含的许多不同的特征的实施例。还有一个MinimalExample项目使用最新的Nuget软件包提供非常简单的Browser实现。这MinimalExample是入门的最佳位置,下载此项目并使其运行以作为基础参考,以确保一切都在您的系统上正常工作。
记录中
默认情况下CEF,在应用程序的执行文件夹(例如)中维护其自己的日志文件('Debug.log')bin。要禁用日志记录更改settings.LogSeveritycss reset的作用和用途,并更改文件名/路径,请使用settings.LogFile。
调试问题时,首先要检查的地方是此日志文件,因为它包含低级Chromium消息。如果您看到错误或警告,请搜索和
工艺流程
CEF使用多进程运行。处理窗口创建,绘画和网络访问的主进程称为browser进程。通常,此过程与主机应用程序相同,并且大多数应用程序逻辑将在浏览器进程中运行。闪烁呈现和JavaScript执行在单独的render过程中进行。一些应用程序逻辑(例如JavaScript绑定)也将在渲染过程中运行。默认进程模型将为每个唯一的来源(方案 域)生成一个新的渲染过程。将根据需要生成其他进程,例如处理插件(如Flash)的“插件”进程和处理加速合成的“ gpu”进程。
默认情况CefSharp下,该render进程的默认实现称为CefSharp.BrowserSubProcess.exe。如上所述,将多次产生此过程以表示单独的过程。从版本开始,51.0.0可以提供自己的自定义BrowserSubProcess,因为可执行文件现在是基础VC 实现的非常简单的包装。
包含有关当前默认流程模型的详细信息。
线程数
CEF使用多个线程进行不同级别的处理。例如browser,该过程包含以下通常引用的线程:
初始化和关闭
Initialize每个进程(应用程序)只能调用一次。可以运行您的应用程序的多个实例,您需要CachePath为每个实例提供唯一的实例,请参阅CefSettings下文。
有关如何在运行时更改设置,隔离浏览器实例css reset的作用和用途,为不同实例设置不同的缓存路径的详细信息,请参见。
重要的是要注意,有必要初始化基础CEF库。这可以通过显式和隐式两种方式之一来实现。创建新实例时ChromiumWebBrowser,它将检查CEF是否已初始化,如果尚未初始化,请使用默认值为您初始化。对于那些希望指定一些自定义设置的用户,您可以CEF如下所示显式初始化自己:
public static void Init()
{
var settings = new CefSettings();
// Increase the log severity so CEF outputs detailed information, useful for debugging
settings.LogSeverity = LogSeverity.Verbose;
// By default CEF uses an in memory cache, to save cached data e.g. to persist cookies you need to specify a cache path
// NOTE: The executing user must have sufficient privileges to write to this folder.
settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache");
Cef.Initialize(settings);
对于Cef.Shutdown,ChromiumWebBrowser将钩住相关Application Exit事件的WinForms和WPF实例,并且默认情况下调用Cef.Shutdown()。设置CefSharpSettings.ShutdownOnExit=false;禁用此行为。在ChromiumWebBrowser创建事件的第一个实例之前,需要设置此值,因为事件处理程序已挂接到ChromiumWebBrowser该类的静态构造函数中。
重要的是要注意CEFInitialize/Shutdown必须在主应用程序线程(通常是UI线程)上调用。如果您在不同的线程上调用它们,则您的应用程序将挂起。
一个使用Initialize/Shutdown手动调用/的示例,WinForms可以将该示例应用于WPF使用该CefSharp.OffScreen包的控制台应用程序(该OffScreen示例位于是一个很好的起点,其中也有一个示例)主项目存储库,它要高级一些)。
public class Program
{
[STAThread]
public static void Main()
{
//For Windows 7 and above, best to include relevant app.manifest entries as well
Cef.EnableHighDPISupport();
//We're going to manually call Cef.Shutdown below, this maybe required in some complex scenarios
CefSharpSettings.ShutdownOnExit = false;
//Perform dependency check to make sure all relevant resources are in our output directory.
Cef.Initialize(new CefSettings(), performDependencyCheck: true, browserProcessHandler: null);
var browser = new BrowserForm();
Application.Run(browser);
//Shutdown before your application exists or it will hang.
Cef.Shutdown();
}
综上所述
CefSettings和BrowserSettings
该CefSettings结构允许配置应用程序范围的CEF设置。一些通常配置的成员包括:
有许多设置和命令行参数可能会影响CEF的行为方式。这里有些例子:
public static void Init()
{
// Specify Global Settings and Command Line Arguments
var settings = new CefSettings();
// By default CEF uses an in memory cache, to save cached data e.g. to persist cookies you need to specify a cache path
// NOTE: The executing user must have sufficient privileges to write to this folder.
settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache");;
// There are many command line arguments that can either be turned on or off
// Enable WebRTC
settings.CefCommandLineArgs.Add("enable-media-stream");
//Disable GPU Acceleration
settings.CefCommandLineArgs.Add("disable-gpu");
// Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed.
// Slightly improves Cef initialize time as it won't attempt to resolve a proxy
settings.CefCommandLineArgs.Add("no-proxy-server");
Cef.Initialize(settings);
些设置可以应用于特定ChromiumWebBrowser实例。如果您正在使用WPF,则可以BrowserSettings在中指定XAML。
var browser = new ChromiumWebBrowser(url)
{
BrowserSettings =
{
DefaultEncoding = "UTF-8",
WebGl = CefState.Disabled
}
IBrowser,IFrame和IBrowserHost
IBrowser和IFrame对象用于将命令发送到浏览器,并在回调方法中返回状态信息。每个IBrowser对象都有一个代表顶层框架的mainIFrame对象,以及零个或多个subIFrame对象。
例如,加载两个HTML
发表评论
热门文章
Spimes主题专为博客、自媒体、资讯类的网站设计....
一款个人简历主题,可以简单搭建一下,具体也比较简单....
仿制主题,Typecho博客主题,昼夜双版设计,可....
用于作品展示、资源下载,行业垂直性网站、个人博客,....
热评文章
最新评论
Z.
11月29日
博主你好,Deng插件,这个点击不进去,提示这个(Warning: require_once(/www/wwwroot/w.zzy2020.com/usr/plugins/Deng/Deng/html/profile.php): failed to open stream: No such file or directory in /www/wwwroot/w.zzy2020.com/Fresh/extending.php on line 26
Fatal error: require_once(): Failed opening required '/www/wwwroot/w.zzy2020.com/usr/plugins/Deng/Deng/html/profile.php' (include_path='.:/www/server/php/72/lib/php') in /www/wwwroot/w.zzy2020.com/Fresh/extending.php on line 26)
点都德
2天前
:喷::喜欢::怒::黑线: