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

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1928
0 评论
875

发表评论

!