【问题标题】:Are there any samples of using CefGlue or CefSharp in a windows forms application with minimum setup?是否有任何在 Windows 窗体应用程序中使用 CefGlue 或 CefSharp 的示例且设置最少?
【发布时间】:2012-10-09 02:30:51
【问题描述】:

我(仍在)使用 Visual Studio 2005 并希望在 c# winforms 应用程序中嵌入 webkit 浏览器,最好作为 winforms 控件。

我正在寻找一个简单的 CefGlue 或 CefSharp 示例以开始使用,以及所需的最少 dll。我无法理解 GitHub 上的 CefSharp 示例。

【问题讨论】:

    标签: c# winforms webkit cefsharp


    【解决方案1】:

    这很容易,但非常遗憾地记录在案。

    为了让它工作,我创建了一个新的 Forms 应用程序,并在我的表单中添加了一个 toolstripContainer。还在我的项目中添加了对 CefSharp.dll 和 CefSharp.WinForms.dll 的引用。

    这是我班级的代码:

    public partial class frmBrowser : Form, IRequestHandler
    {
        private readonly WebView web_view;
    
        public frmBrowser()
        {
            InitializeComponent();
            web_view = new WebView("http://stackoverflow.com", new BrowserSettings());
            web_view.Dock = DockStyle.Fill; 
            web_view.RequestHandler = this;
            tsContainer.ContentPanel.Controls.Add(web_view);
        }
    
        #region IRequestHandler Members
    
        bool IRequestHandler.OnBeforeBrowse(IWebBrowser browser, IRequest request,
                                   NavigationType naigationvType, bool isRedirect)
        {
            System.Diagnostics.Debug.WriteLine("OnBeforeBrowse");
            return false;
        }
    
        bool IRequestHandler.OnBeforeResourceLoad(IWebBrowser browser,
                                         IRequestResponse requestResponse)
        {
            System.Diagnostics.Debug.WriteLine("OnBeforeResourceLoad");
            IRequest request = requestResponse.Request;
    
            if (request.Url.EndsWith("header.png"))
            {
                MemoryStream stream = new System.IO.MemoryStream();
    
                FileStream file = new FileStream(@"C:\tmp\header.png", FileMode.Open, FileAccess.Read, FileShare.Read);
                byte[] bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
                stream.Write(bytes, 0, (int)file.Length);
                file.Close();
    
                requestResponse.RespondWith(stream, "image/png");
            }
    
            return false;
        }
    
        void IRequestHandler.OnResourceResponse(IWebBrowser browser, string url,
                                       int status, string statusText,
                                       string mimeType, WebHeaderCollection headers)
        {
            System.Diagnostics.Debug.WriteLine("OnResourceResponse");
        }
    
        #endregion
    }
    

    具有请求处理程序的区域是可选的,这是您想要影响调用的时候。在我的示例中,我将对标题图像的调用重新路由到我的 c 驱动器上的图像。

    这就是您需要的代码。您还需要将以下文件添加到可执行文件的文件夹中:

    • avcodec-54.dll
    • avformat-54.dll
    • avutil-51.dll
    • chrome.pak
    • icudt.dll
    • libcef.dll
    • libEGL.dll
    • libGLESv2.dll
    • 语言环境文件夹

    其中一些文件是可选的,具体取决于您想对它们做什么,但您可以在 Google 上搜索。

    【讨论】:

    • 谢谢你!此外,如果您没有安装 DirectX,如果您的运行时 exe 目录中有 libEGL.dll 和/或 libGLESv2.dll,您将收到“d3dx9_43.dll 缺失”错误,他们将尝试加载 d3dx9_43.dll 以启用WebGL 内容。删除 libEGL.dll 和 libGLESv2.dll 可以解决此问题。
    • 在将 .Net 4 客户端配置文件定位到 app-config 时,我还必须添加 <startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup> 以使其与预编译的 CefSharp 二进制文件一起使用。这修复了混合模式组装错误。
    • 对我来说,在web_view = new WebView("http://stackoverflow.com", new BrowserSettings()); 上安静地爆炸,try... catch 中没有错误。
    • 嗨,还有关于如何添加缓存的小教程吗?我正在尝试 awesomium,它就像创建一个网络会话并将其保存到磁盘一样简单。由于缺乏教程,你知道如何在cefsharp中做同样的事情吗?谢谢!
    【解决方案2】:

    CefGlue(CEF1 的过时版本)和 Xilium.CefGlue (CEF3) 已经包含演示应用程序。 Xilium.CefGlue 包含两个演示应用程序 - 第一个(称为 CefGlue.Demo 在 winforms 下的 windows 上工作并在 linux 上使用 GtkSharp)和 CefGlue.Client - 也是非常简单的仅限 winforms 的演示程序。所以 CefGlue.Client 已经有了非常简单的 winforms 控件。

    UPD:Xilium.CefGlue 程序集针对 .NET 2.0。 Xilium.CefGlue.Client 针对 .NET 3.5 客户端配置文件。但总的来说,它不使用任何 3.5 特定的并且可以修复。但我建议使用最低 .NET 4.0 运行时,因为它有更好的 GC。在生产环境中安装 2.0 而不是 4.0 没有任何意义。

    【讨论】:

    • 在 VS2013 的 Xilium.CefGlue 中运行演示项目时,出现错误:“无法直接启动具有类库输出类型的项目”。我已将启动项目设置为演示。你知道我应该改变什么来运行演示项目吗?
    • 使用 CefGlue.Demo.WinForms。也使用 2357 分支,因为 2454 还没有准备好(但会很快更新)。
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多