「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を指定してみましょう。
|xml|
<phone:WebBrowser Name="webBrowser1" Source="http://ch3cooh.jp/" /> ||<
**任意のURLのウェブページへ遷移する
WebBrowserコントロールは、Navigateメソッドを使って任意のURLのウェブページへ遷移させることが出来ます。
|cs| webBrowser1.Navigate(new Uri("http://ch3cooh.jp/")); ||<
**ウェブページの遷移中に発生するイベント
WebBrowserコントロールは、ウェブページの遷移中に3つのイベントを発生させます。ページ遷移前に発生するNavigatingイベント、正常にページ遷移すると発生するNavigatedイベント、ページ遷移に失敗すると発生するNavigationFailedイベントの3つです。
基本的にはイベントが発生する順は以下の2通りとなります。
|遷移の成功|Navigatingイベント→Navigatedイベント| |遷移の失敗|Navigatingイベント→NavigationFailedイベント|
例外としてNavigatingイベントでキャンセルされた場合や、遷移したウェブページのステータスが移転を示す302が返ってきた場合などは、Navigatingイベントが複数回発生した後にNavigatedイベントが発生します。
イベントがどのように発生しているのかを調べるために、ユーザー操作でページが遷移されるサンプルコードを以下に示します。
|cs| 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("ページ遷移に失敗しました");
}
}
} ||<