WebBrowserTaskを使ってWebサイトをIEで見る

アプリ内でWebBrowserコントロールを使う方法もありますが、やはり表示領域の小さいコントロールを使うよりもIEの方が閲覧しやすいです。アプリからIEを起動させる事が出来ます。

Microsoft.Phone.Tasks名前空間のCameraCaptureTaskクラスを使用します。WebBrowserの表示には、 Showメソッドを使用します。

var url = string.Format("http://www.google.co.jp/m/directions?dirflg=r&saddr={0}&daddr={1}", 
	Uri.EscapeUriString("大阪"), Uri.EscapeUriString("東京"));
 
var task = new Microsoft.Phone.Tasks.WebBrowserTask();
task.URL = Uri.EscapeDataString (url);
task.Show();

上記のコードを実行してみました。

よもや話ですが、WebBrowserTaskへ「http://example.com/?hoge=hoge&piyo=piyo」という文字列をURLプロパティへ設定すると、パラメータのpiyoの部分が除去されてしまいます。これは、URLプロパティへ設定時にURLデコードが行われているからだと思われます。

Windows Phone エミュレータがBeta版だった時には、上記のURLプロパティにはURL文字列をそのままの形で渡せたのですが、RTW版の時点で修正がかかり、Uri.EscapeDataStringメソッドでエスケープしたURL文字列を渡さないといけないようになりました。

MSDNフォーラムでこの現象はバグだ(要出典)との回答があったため、修正が待たれていましたが、WebBrowserTask.URL Propertyのページにて注釈が追加されました。

Windows Phone OS 7.1での修正点(Uriプロパティの追加)

ブラウザアプリ起動時の表示ページを指定するURLプロパティが、Windows Phone OS 7.1からは非推奨となりました。

代わりにUriプロパティが追加されており、非推奨プロパティが今後いつ削除されてしまうのか判らないため、OS 7.1以降で使うアプリにはURLプロパティは使用しないほうが良いでしょう。

Windows Phone OS 7.1用にサンプルコードを書き換えておきます。

var url = string.Format("http://www.google.co.jp/m/directions?dirflg=r&saddr={0}&daddr={1}",
	Uri.EscapeUriString("大阪"), Uri.EscapeUriString("東京"));
 
var task = new Microsoft.Phone.Tasks.WebBrowserTask();
task.Uri = new Uri(url);
task.Show();

実行結果は、Windows Phone OS 7.0の時と同じです。