WPF / C#でIE WebBrowserコントロールの代わりにChromiumを埋め込むためのオプション


158

Internet ExplorerベースのWPF WebBrowserコントロールには、キーボードとフォーカスの問題、およびメモリリークの問題があります。これらの問題の代替ソリューションとして、HTML編集に基づくWPF / C#プロジェクトでWebBrowserコントロールの代わりにChromiumをホストするための利用可能なオプションを検討しています。同様の質問がされてい尋ね以前にここに。私は答えを読んで自分の調査を行いましたが、実際に生産品質のプロジェクトで次のオプションのいずれかを使用した人々からさらにフィードバックを得たいと思います

AwesomiumおよびAwesomium.NET

それは非常に適切に見えますが、プロジェクトがオープンソースではなく、完全なソースが簡単に入手できないという事実は好きではありません。また、オフスクリーンレンダリングは私たちが実際に依存しているものではないため、プロジェクトにとってはやり過ぎかもしれません。

CEF用のChromium Embedded Framework(CEF)および.NETバインディング

これはおそらく現在利用可能な最良のオプションです。プロジェクトは生きていてアクティブで、現在Chrome v27と同期しているようです。CEF3はChromeマルチプロセスアーキテクチャを使用しています。また、アドビがそれを支持しいるようにも見えます。

GoogleのChromeフレーム

その本来の目的はIEとFirefoxのHTML5プラグインでしたが、実際にはスタンドアロンのActiveXコントロールとしても機能するため、WPFで使用するためにラップすることができました。内部Webページとの対話に十分なAPIを公開します(onmessage, addEventListener/removeEventListener, postMessage)。GoogleがChrome Frame を廃止する予定であることは承知していますが、ソースはChromiumリポジトリに残ると思います。最新のChromiumコードで更新することは難しくありませんし、これを完全に制御できます。

WebKit .NETラッパー

正確にはChromiumベースではなく、V8エンジンを使用しないため、実際にはオプションではありません。

私が見落としたかもしれない他のオプションはありますか?

誰かが実際の生産品質のWPFプロジェクトの上記のオプションのいずれかで彼女/彼の経験を共有してくれれば幸いです。統合、ライセンス、または導入の影響はありましたか?ありがとうございました。

[ 編集済み] また、寛大な報奨金を提供することでこの質問を後押ししてくれたartlungにも感謝します。

回答:


124

Chromiumを埋め込むための最も注目すべきソリューション(CEF、Chrome Frame、Awesomium)をすでにリストしました。重要なプロジェクトはこれ以上ありません。

まだそこにあるバークリウムのプロジェクトは、(参照バークリウムシャープバークリウムはマネージド)が、それはクロムの古いバージョンをemebeds。

CEFが最善の策です。完全にオープンソースで、頻繁に更新されます。Chromiumの最新バージョンを埋め込むことができる唯一のオプションです。Per LundbergがCEF 3のCefSharpへの移植に積極的に取り組んでいる今、これは将来の最良のオプションです。Xilium.CefGlueもありますが、これはCEFの低レベルAPIを提供し、CEFのC APIにバインドします。一方、CefSharpはCEFのC ++ APIにバインドします。

アドビだけがCEFを使用している主要なプレーヤーではありません。CEFウィキペディアのページでCEFを使用している他の注目すべきアプリケーションをご覧ください

プロジェクトが終了したため、Chrome Frameを更新しても意味がありません。


また、Cookieのクリア、キャッシュの設定、プロキシの設定など、半分が機能しないことを忘れていました。Awesomiumを使用して、問題を保存してください。

4
へへ、いい答え、ツァレック、ありがとう。:)(これまでこれを見ていませんでした)
Lundbergによる2013年

4
もちろん、指摘する価値があります。オープンソースプロジェクトには、明らかに「欠けているもの」があるかもしれません。Xilium.CefGlueもCefSharpもそのルールの例外ではありません。オープンソース関連の優れた点は、実際には(かなり少ない)時間をかけて小さな問題を調査し、修正を含めることができることです。CefSharpで時々それが見られ、それはかなりきちんとしています。
2013年

1
私が間違っていても、CefSharpが50MBを超えるDLLをすべて要求しない場合は、私を修正しますか?その結果、巨大なインストールセットアップが発生します。libcef.dllは主要な依存関係としてリストされており、38MBです
Krafty

2
@Kraftyインストールセットアップでは、7zなどのアルゴリズムを使用してパッケージをパックできます。これにより、サイズが55 MBから17 MBに減少します。CefSharpのサイズは、解凍された152 MBと40 MBのセットアップがパックされたGoogle Chromeと比較するとそれほど大きくありません。
Czarek Tomczak

11

先ほどとまったく同じ課題がありました。WPFベースで.NET 3.5をサポートするCEF3オープンソースライブラリを使用したいと考えました。

まず、CEFの作者自身がさまざまな言語の拘束力をここに挙げました

次に、Xilium.CefGlueと呼ばれるオープンソースの.NET CEF3バインディングを使用して、成功しました。期待どおりに機能しない場合、通常、作成者は組み込みのbitbucketトラッカーで開かれた問題に非常に敏感です

これまでのところ、うまく機能しています。著者は、最新のCEF3リリースと定期的なバグ修正をサポートするようにライブラリを更新します。


2
これは実際にはポイントです( "反対側"から来て、これはCefSharpです)-新しいVSツールセットで3.5をサポートする問題のため、CefSharpは数か月以来4.0です。(VS2010 +はC ++ / CLIで古いフレームワークをサポートできません。これは、.NET 4または本当に古いVisual Studioバージョンを使用せざるを得ないので少し悲しいです...)
Lundbergによる2013年

8

ここに別のものがあります:

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

これも最新のChromeエンジンに基づいていますが、CEFよりもはるかに使いやすくなっています。これは、単純に参照して使用できる単一の.NET DLLです。


サポートも素晴らしいです。
huseyint 2014

3
そのウェブサイトに基本情報が欠けているようです-どのChromeバージョンに含まれていますか?
Czarek Tomczak 14

2
ええと、無料ではありません。無料ではありません。これらの人たちは何を考えていましたか?:)
dkellner 2018年

試用版はありますが、無料ではないことを前もって述べておかなければなりません。
ewilan 2018年

8

私が所属するチームが開発したDotNetBrowserライブラリを見てください。.NETアプリケーションに組み込むのが非常に簡単なChromiumベースのWPFおよびWinFormsブラウザーコントロールを提供します。HTML5、CSS3、JavaScriptを含むすべての最新のWeb標準をサポートしています。レンダリングされたページは、Google Chromeとまったく同じように見えます。

ライブラリはChromiumのマルチプロセスアーキテクチャを継承しています。各Webページは個別のChromiumプロセスでレンダリングされ、プラグインのクラッシュやその他の予期しないエラーがWebページで発生した後でもアプリケーションは機能し続けます。

DotNetBrowserが提供するその他の便利な機能は次のとおりです。ロードイベントのリッスン、ネットワークアクティビティの処理、プロキシの構成、ユーザーアクションのシミュレーション、Cookieの操作、DOMへのアクセスと変更、DOMイベントのリッスン、.NETからのJavaScriptの呼び出しが可能です。逆も同様です。WebページでWebカメラとマイクを使用したり、WebRTCベースの通信を設定したりします

詳細については、APIリファレンスをご覧ください。

以下のコードスニペットは、BrowserViewを作成し、それをフォームに埋め込み、URLをロードする方法を示しています。

using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;

namespace WinForms.DotNetBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            BrowserView browserView = new WinFormsBrowserView();
            Controls.Add((Control) browserView);
            browserView.Browser.LoadURL("http://www.youtube.com");
        }
    }
}

上記の例を実行すると、次の出力が得られます。

ここに画像の説明を入力してください

ライブラリは商用です。商用ライセンスには、さまざまなチームサイズのサポートパッケージが含まれています。ライブラリのソースコードを購入することも可能です。

独自のページのほかに、コンポーネントはNuGetパッケージおよびVisual Studio MarketplaceのVSIXパッケージとして入手できます。


1
有効に見え、試用版をアプリに埋め込みました。唯一の問題は、それが商用製品であり、ライセンスがあまり安くないということです。それ以外の場合は、私にはしっかりしているように見えます。
DoronG

残念ながら、DotNetBrowserは無料ではありません。:/
デニズ

4

Awesomium.NETを使用しました。オープンソースではないこと、そしてかなり古いWebkitレンダリングエンジンを使用していることは好きではありませんが、本当に使いやすいです。それは私がそれを与えることができる唯一の承認についてです。


1
そのプロジェクトのユーザーベースの大きさをおおよそお話しいただけますか?
noseratio 2013

実際にプロジェクトをデプロイしたことはないので、ユーザーベースはゼロでした。私は自分でオプションを試してみました。
Ming Slogar 2013

2
AwesomiumベースのC#アプリのサポートに数か月かかりました。C ++ゲームでは揺るぎないかもしれませんが、C#ではブラウザのコントロールがまったくバギーです。複雑な展開(GACにコンテンツを追加するには奇妙なインストーラーが必要です)、バグのある動作(黒い画面で起動することがある、ユーザーが手動でアプリを再起動する必要がある)、速度が遅い(Webページが読み込まれるときに表示されない) 、ページが完全に/半分読み込まれるまでハングし、遅いマシンでの初期化には5〜10秒かかります)
TheFlash

5
ようやくCefSharpを使いましたが、結果は素晴らしいものでした。100ミリ秒未満の初期化(つまり、インスタント初期化)であり、「バグ」はありません。スタッフはうまくいきます。それがあるべきように。また、CefSharpをGACに追加する必要がないため、インストーラーを変更する必要はありません。ただあなたのファイルをコピーして行ってください。CEF / CefSharpは、私がテストしたすべてのMozilla / WebKit C#ライブラリよりも優れていると言ったでしょうか。ああ、そして天国のためにIEを使用しないでください。できます。はい、ありますが、それは完全に機能不足であり、非常に悪い(速度)です。
TheFlash

1
@RobinRodricksまさに私の経験も。私はほとんどアプローチをあきらめましたが、CefSharpを見つけました:-)(そして、最近、プリンタードライバーがDVDで提供されるときに、さらに2、3 MBを気にしています:
Xan-Kun Clark-Davis


2

私のWPF RSSリーダーにも同じ問題がありました。最初はAwesomium(バージョン1.6だと思います)を使いました。Awesomiumは素晴らしいです。キャッシング(画像とHTMLコンテンツ)、JavaScriptの実行、ダウンロードのインターセプトなど、多くの制御が可能です。また、超高速です。プロセスの分離とは、ブラウザがクラッシュしてもアプリがクラッシュしないことを意味します。

しかし、それはまた重く、リリースビルドでも約10〜15MB(正確な数を思い出せない)を追加するため、起動時に若干のペナルティがあります。その後、IEブラウザーコントロールでの唯一の問題は、JavaScriptエラーが時々スローされることでした。しかし、それは次のスニペットで修正されました。

XPやVistaではほとんど使用していませんが、Win 7以降ではクラッシュしませんでした(少なくともIEブラウザコントロールを使用したためではありません)。

IOleServiceProvider sp = browser.Document as IOleServiceProvider;
if (sp != null)
{
    IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
    Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");

    webBrowser;
    sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
    if (webBrowser != null)
    {
        webBrowser.GetType().InvokeMember("Silent", 
                BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
    }
}

答えてくれてありがとう。それで、最終的にAwesomiumからIEに戻りましたか?
noseratio 2013

はい、そうしました。そして私は幸せでした。私はClickOnceを使用しているため、展開可能ファイルは小さく、起動がフリーズしませんでした。
Sameer Vartak 2013

ありがとう、私はあなたの答えに賛成票を投じました。ところで、内部インターフェイスを取得する別の方法がありIWebBrowser2ます。
noseratio 2013

涼しい。ActivexコントロールはWPFで機能しますか?投票していただきありがとうございます:-)
Sameer Vartak 2013

申し訳ありませんが、参照リンクを注意深く読みませんでした。うん、それはXAMLサンプルであり、動作します。ありがとう。
Sameer Vartak 2013

1

マイクロソフトは、「Microsoft Edge WebView2」WPFコントロールをリリースします。これにより、Windows 10、Windows 8.1、またはWindows 7全体にChromiumを埋め込むための優れた無料のオプションが提供されます。これは、パッケージとしてNugetから入手できますMicrosoft.Web.WebView2


これは素晴らしいオプションですが、2020年ですが、今日はChromelyなどのクロスプラットフォームソリューションを探しています。
noseratio

1
デスクトップアプリに追加するのか、ウェブアプリのように構築したデスクトップアプリに追加するのかは、状況によって異なります。WebView2を使用するのは、それがデスクトップアプリに対する小さなWeb要素である場合に限られると思います。
scottheckel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.