酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでWebBrowserコントロールを使う

Windows Phone Advent Calendar "ひとり" 2011」第3日目。

Windows Phoneアプリケーションで、任意のURLのウェブページを閲覧させたい場合、2種類の方法が提供されています。URLをパラメータにして標準のIE Mobileを起動させるWebBrowserTaskと、アプリケーション内でウェブページを表示させるWebBrowserコントロールです。

本日は後者のコントロールを使ったアプリケーションを作ってみましょう。

WebBrowserコントロールを配置する

Windows Phoneアプリケーション内にWebBrowserコントロールを配置してみましょう。Visual Studioの左側にツールボックスがあります。Windows Phoneコントロールがリスト表示されています。WebBrowserを見つけられましたでしょうか?

WebBrowserを選択してドラッグアンドドロップでアプリケーションページへ配置します。

Sourceプロパティにあらかじめ表示させたいURLを設定しておくことも可能です。デザイナーにて配置したWebBrowserコントロールを選択した状態でプロパティリストを確認します。
Sourceプロパティの欄が空白になっていますので、ここでは仮に僕のサイトのURLを http://ch3cooh.jp/ と入力しておきます。

キーボードのF5ボタンを押下、またはVisual Studioのツールバーにある[デバッグ]→[デバッグ開始]を選択して、アプリケーションを実行します。

WebBrowserコントロールの表示後に、ウェブページの読み込みが開始されます。無事に表示されたでしょうか。
XAMLでも同様にWebBrowserの配置と初期表示のURLを指定してみましょう。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:WebBrowser Name="webBrowser1" Source="http://ch3cooh.jp/" />
</Grid>

任意のURLのウェブページへ遷移する

WebBrowserコントロールは、Navigateメソッドを使って任意のURLのウェブページへ遷移させることが出来ます。

webBrowser1.Navigate(new Uri("http://ch3cooh.jp/"));

ウェブページの遷移中に発生するイベント

WebBrowserコントロールは、ウェブページの遷移中に3つのイベントを発生させます。ページ遷移前に発生するNavigatingイベント、正常にページ遷移すると発生するNavigatedイベント、ページ遷移に失敗すると発生するNavigationFailedイベントの3つです。

基本的にはイベントが発生する順は以下の2通りとなります。

遷移の成功 Navigatingイベント→Navigatedイベント
遷移の失敗 Navigatingイベント→NavigationFailedイベント

例外としてNavigatingイベントでキャンセルされた場合や、遷移したウェブページのステータスが移転を示す302が返ってきた場合などは、Navigatingイベントが複数回発生した後にNavigatedイベントが発生します。

イベントがどのように発生しているのかを調べるために、ユーザー操作でページが遷移されるサンプルコードを以下に示します。

using System;
using System.Windows;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;

namespace WebBroserTest {
    public partial class MainPage : PhoneApplicationPage {
        public MainPage() {
            InitializeComponent();

            webBrowser1.Navigated += webBrowser1_Navigated;
            webBrowser1.Navigating += webBrowser1_Navigating;
            webBrowser1.NavigationFailed += webBrowser1_NavigationFailed;
        }

        private void ApplicationBarIconButton_Click(object sender, System.EventArgs e) {
            webBrowser1.Navigate(new Uri("http://ch3cooh.jp/"));
        }

        // 遷移中に発生するイベント
        void webBrowser1_Navigating(object sender, NavigatingEventArgs e) {
             MessageBox.Show("遷移中");
        }

        // 遷移に成功した場合に発生するイベント
        void webBrowser1_Navigated(object sender, NavigationEventArgs e) {
            MessageBox.Show("ページ遷移に成功しました");
        }

        // 遷移に失敗した場合に発生するイベント
        void webBrowser1_NavigationFailed(object sender,NavigationFailedEventArgs e) {
            MessageBox.Show("ページ遷移に失敗しました");
        }
    }
}