12

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

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

4

2 回答 2

14

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

为了让它工作,我制作了一个新的 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
  • 铬.pak
  • icudt.dll
  • libcef.dll
  • libEGL.dll
  • libGLESv2.dll
  • 语言环境文件夹

其中一些文件是可选的,具体取决于你想对它们做什么,但你可以用谷歌搜索。

于 2012-11-15T11:01:30.273 回答
5

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

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

于 2012-10-26T16:23:47.673 回答