LoginSignup
41
51

More than 5 years have passed since last update.

WPFでCefSharp(Chromiumの.NET向け実装)を使う - 1

Posted at

経緯

WPFにはデフォルトでウェブブラウザを扱うためのコンポーネントSystem.Windows.Controls.WebBrowserが用意されていて、簡単にウェブブラウザを埋め込んだアプリケーションの開発を行うことができます。

しかし、このWebBrowserコンポーネントはなかなか厄介で、以下のような問題を抱えています。

  • デフォルトでIE7互換のブラウザとして振舞う(IE11互換で動かすためにはレジストリの書き換えが必要)
  • UserAgent変えたりするのにアンマネージドなコードを触る必要がある
  • 一時ファイル類の操作がつらい(キャッシュやCookie消せないしそもそもどこにいるのかわからない)

単にウェブページを表示するだけのアプリであればWebBrowserコンポーネントで問題ないのですが、少し複雑なことをやろうとするとつらくなってきます。

なので、WebBrowser以外のWPFで利用可能なブラウザのコンポーネントを調べてみることにしました。

ちょっと分量が多くなりそうなので数回に分けて検証します。

Cefについて

CefはChromium Embedded Frameworkの略で、Chromiumをアプリケーションに組み込むためのフレームワークです。

Cefには各言語向けのラッパーがあり、その中のC#実装がCefSharpです。

CefSharpにはWPF対応のコンポーネントが用意されているので、それを利用してWebBrowserを置き換えることができるか検証してみます。

インストール

CefSharpはNuGetでインストールできるようになっているのですが注意すべきことがあります。

  • 2017/4/24現在の最新版は.NET4.5.2以上を要求する
  • Any CPUには対応していないので、プラットフォームをx86かx64にしておく(しておかないと参照がうまく追加されなくて手動で追加する必要がある?)

cefnuget.PNG

動かしてみる

適当に作ったWPFのプロジェクトのMainWindow.xaml.csにでも書いてみる。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var browser = new CefSharp.Wpf.ChromiumWebBrowser();
        browser.Address = "https://google.co.jp";
        Content = browser;
    }
}

simplemainwindow.PNG

URLの遷移について

ウェブブラウザを別のURLに遷移させる際、ChromiumWebBrowser.Addressを書き換える方法と、ChromiumWebBrowser.Load(url)を呼ぶ方法があります。

基本的な挙動に変わりはありませんが、ブラウザが初期化されていないときに実行すると挙動が変わります。

Addressを書き換えた場合

ブラウザの初期化後にそのURLに遷移する

Loadを呼んだ場合

初期化されていないので何も起こらない

まとめ

  • WPFでウェブブラウザを組み込んだアプリケーションを作りたいならWebBrowserを使う方法とCefSharpがある(ほかにもあるかも)
  • プラットフォームをx86/x64にしたWPFのプロジェクトにNuGetでCefSharp.Wpfを追加することでChromiumベースのウェブブラウザコンポーネントが利用できる
  • Load(url)やAddressで遷移できるけど初期化前の挙動に注意

次回はWebBrowserの各機能との対応を検証します。

元記事(はてなブログ)

41
51
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
51