読者です 読者をやめる 読者になる 読者になる

WebBrowserTaskに渡すURLはUri.EscapeDataStringしておく必要がある

以前、id:iseebi:20101223:p2でWebBrowserTaskがバグっててURLの&以降を完全無視するとかいたのですが、これはどうもエスケープしておく必要があるという仕様のようでした。

Remarks

URLs that contain special characters must be escaped before being assigned to the URL property. Use the Uri.EscapeDataString method to escape the URL string.

http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.webbrowsertask.url%28v=VS.92%29.aspx

というわけなので、自分が以前に書いた以下のコード。

WebBrowserTask task = new WebBrowserTask();
task.URL = "http://www.google.co.jp/search?q=" + Uri.EscapeUriString(searchWordTextBox.Text) + "&ie=utf-8&oe=utf-8";
task.Show();

これはリダイレクタをかまさなくても以下のように書き直せば動作します。

WebBrowserTask task = new WebBrowserTask();
task.URL = Uri.EscapeDataString("http://www.google.co.jp/search?q=" + Uri.EscapeUriString(searchWordTextBox.Text) + "&ie=utf-8&oe=utf-8");
task.Show();

これはJanuary 2011 Updateでの修正と言うことではなく、RTMの時点でこうなっています。また、CTPの時点ではこのエスケープは不要でした。

まさかこういうこととはつゆしらず。というかそもそも、WebBrowserTask.URL が Uri クラスにしておくべきだったんじゃないかとも思うんですけどね…。