C# で Gecko ベースのブラウザを作成する

 C#Gecko レタリングエンジンベースのブラウザを作るためのライブラリには、GeckoFx があります。
 GeckoFx を Google で検索すると、開発初期に使用されていた Google Code でのページが上位に表示されるため、開発が止まっているように見えてしまいますが、現在も Bitbucket で開発が継続されています。

導入準備

1. GeckoFx のダウンロード
 GeckoFx のプロジェクトホームページから、Gecko Fx 10.0 をダウンロードします。最新版でも構いませんが、ここで 10.0 を選ぶ理由は、次の手順2で説明します。

2. XULRunner のダウンロード
 GeckoFx は、Geckoエンジンをコンポーネント化した XPCOM である XULRunner をラップするライブラリですので、このまま単体では動作しません。ですので、この XULRunner を ftp.mozilla.org からダウンロードします。いくつもあるバージョンの中から 10.0.4esr を選ぶ理由は、XULRunnerがラピッドリリースであり最新版では安定性を重視できないこと、esrは法人向け延長サポート版であることの二点が挙げられます。
 なお、GeckoFx と XULRunner のバージョンは同じもの(XULRunnerのバージョンが x.y.z である場合は、GeckoFx は x.y のバージョン)を選ぶ必要があります(ここでは、GeckoFx 10.0 と XULRunner 10.0.4esr)。

3. 圧縮ファイルの展開
 手順1と手順2で入手した圧縮ファイルをそれぞれ展開しておきます。

プロジェクト作成

1. プロジェクト作成

2. ビルド
 プロジェクト固有のビルドフォルダが用意されていなければ、プロジェクトのビルドフォルダを確保するためにソリューションのビルドを実行します。

3. 参照設定の追加
 プロジェクトの参照設定に「geckofx-10.dll」を追加します。

4. ソースコード修正
 このままでは GeckoFx を使えない(XULRunner を初期化できない)ので、プロジェクトの「Program.cs」を以下のように修正します。ファイルパスの部分は、XULRunner が置いてある場所(導入準備の手順3で XULRunner を展開したフォルダのパス)に書き換えて下さい。

[STAThread]
static void Main()
{
    Gecko.Xpcom.Initialize(ファイルパス); // この行を追加

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}

コーディング

 Visual Studio のデザイナーから Form の Load イベントを自動生成します。その後、Form のコードエディタを開き、以下のように編集します(「using Gecko;」をファイルの using 宣言がたくさん書かれている先頭部分の最後尾に追加して下さい)。

public partial class Form1 : Form
{
    private GeckoWebBrowser gecko = default(GeckoWebBrowser);

    public Form1()
    {
        InitializeComponent();

        this.SuspendLayout();
        this.gecko = new GeckoWebBrowser()
        {
            Dock = DockStyle.Fill,
            Parent = this
        };
        this.ResumeLayout(false);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.gecko.Navigate("http://google.co.jp/");
    }
}

 以上で、完成です。
 GeckoFx をツールボックスの項目に追加し、Form にドラッグ&ドロップでコントロールを追加すると、上記のうちLoad イベントの内容だけ書くということもできます。

まとめ

 GeckoFxは、Open-Webkit-Sharpよりも安定したパフォーマンスを発揮します(ライブラリの構造の違いによる影響も大きいかとは思いますが)。XULRunner は、適切な場所とタイミングで初期化すると、起動時にそれほどもたつかずレンダリングを高速に行ってくれます。ただ、Visual Studio でのホスティングプロセス付きによるデバッグだったからなのか、数回程度PCごと巻き込んでフリーズして帰ってこなくなったことがあったことが、個人的にはちょっと気にかかるところです。