12

私は(まだ)Visual Studio 2005を使用しており、できればwinformsコントロールとしてac#winformsアプリケーション内にWebkitブラウザーを埋め込みたいと思っています。

必要最小限のdllとともに、開始するCefGlueまたはCefSharpの簡単な例を探しています。GitHubのCefSharpサンプルを理解できません。

4

2 に答える 2

14

それは非常に簡単ですが、非常に悲しいことに文書化されています。

それを機能させるために、新しいフォームアプリケーションを作成し、ツールストリップコンテナをフォームに追加しました。また、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
  • ロケールフォルダ

これらのファイルのいくつかは、それらを使って何をしたいかに基づいてオプションですが、グーグルで検索することもできます。

于 2012-11-15T11:01:30.273 に答える
5

CefGlue(CEF1の古いバージョン)およびXilium.CefGlue(CEF3)には、すでにデモアプリケーションが含まれています。Xilium.CefGlueには、2つのデモアプリケーションが含まれています。1つ目は(CefGlue.DemoはwinformsでWindowsで動作し、LinuxではGtkSharpを使用します)、CefGlue.Clientも非常に単純なwinformsのみのデモです。したがって、CefGlue.Clientにはすでに非常に単純なwinformsコントロールがあります。

UPD:.NET2.0を対象としたXilium.CefGlueアセンブリ。.NET3.5クライアントプロファイルを対象とするXilium.CefGlue.Client。ただし、一般的には3.5固有のものを使用せず、修正できます。ただし、GCがはるかに優れているため、最小の.NET4.0ランタイムを使用することをお勧めします。本番環境で4.0ではなく2.0をインストールしても意味がありません。

于 2012-10-26T16:23:47.673 に答える