前回はWebBrowserコントロールを使いましたが、今度はWebKit.NETを使ってみます。
WebkitはGoogle ChromeとかSafariとかAndroidとかで使われているレンダリングエンジンですね。これを.NETから簡単に使えるようにしたライブラリがWebKit.NETです。
C#でWebKit.NETを使う場合、インストールなどの事前準備の方が手間ですね。アプリケーションから使用する分にはWebBrowserコントロールを使う場合と大差はありません。
ファイルのダウンロード
WebKit.NETをダウンロードします。
WebKit .NET プロジェクト日本語トップページ - SourceForge.JP
執筆時点での最新版は「WebKit.NET-0.5-bin-cairo.zip」でした。
ダウンロードしたファイルは適当なフォルダに展開しておきます。
ツールボックスへ追加
Visual Studioの、ツールボックスで右クリックし、[アイテムの選択(I)...]をクリックします。
「.NET Frameworkコンポーネント」の[参照(B)...]をクリックして、展開したbinフォルダの中にあるWebKitBrowser.dllを選択します。
ツールボックスにWebKitBrowserが追加されました。
プロジェクトのプロパティ変更
プロジェクトのプロパティの「デバッグ」にある“Visual Studio ホスティング プロセスを有効にする(O)”のチェックを外します。
Visual Studioホスティングプロセスというのは、Visual Studioでデバッグ機能の改善・強化のためのものですが、WebKit.NETとは相性が悪いらしく、実行時にエラーになるようです。Visual Studioホスティングプロセスについては、下記のサイトなどを参照ください。
VSホスト・プロセス(*.vshost.exe)とは何か?[VS 2005のみ、C#、VB]
以上で、準備は終了です。
プログラムの作成とビルド
WebKitBrowserはWebBrowserとほとんど同じように使用できます。前回作成したプログラムのWebBrowserをWebKitBrowserに差し替えてみます。
Navigate,GoBack,GoForward,などはそのまま利用可能。RefreshはReloadに代わります。GoHomeは互換メソッドが見つかりませんでした。Webkitにはないのかも。
public Form1() { InitializeComponent(); this.comboBox1.Text = "http://www.google.com"; this.button1.Text = "戻る"; this.button2.Text = "進む"; this.button3.Text = "更新"; this.button4.Text = "ホーム"; this.button5.Text = "移動"; } /// <summary> /// URL入力エリア:選択変更 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { try { // 移動 webKitBrowser1.Navigate(comboBox1.Text); } catch { } } /// <summary> /// URL入力エリア:キー入力 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBox1_KeyDown(object sender, KeyEventArgs e) { // エンターキー if (e.KeyCode == Keys.Enter) { // 移動ボタン入力と同じ button5.PerformClick(); } } /// <summary> /// 戻るボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { // 戻る this.webKitBrowser1.GoBack(); } /// <summary> /// 進むボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { // 進む this.webKitBrowser1.GoForward(); } /// <summary> /// 更新ボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { // 更新(再読み込み) this.webKitBrowser1.Reload(); } /// <summary> /// ホームボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { // ホームへ移動 } /// <summary> /// 移動ボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button5_Click(object sender, EventArgs e) { // 入力したURLに移動する try { string url = comboBox1.Text; // "http://"が無ければ補完 if (comboBox1.Text.StartsWith("http://") == false) { url = "http://" + url; } // 移動 webKitBrowser1.Navigate(url); comboBox1.Items.Add(url); } catch { } } /// <summary> /// WebKitブラウザ:ナビゲーション実行時 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void webKitBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { // URL入力エリアにナビゲートしたサイトのURLを設定 try { this.comboBox1.Text = this.webKitBrowser1.Url.ToString(); } catch { } } /// <summary> /// WebKitブラウザ:ドキュメントのタイトル変更時 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void webKitBrowser1_DocumentTitleChanged(object sender, EventArgs e) { // フォームのタイトルを変更 this.Text = this.webKitBrowser1.DocumentTitle; }
ビルドしたあと、ビルドして出来た実行ファイルと同じフォルダに、Webkit.dllなどのdll群やリソースファイルをコピーします。具体的には、展開したbinフォルダ以下の内容をコピーすればOKです。