例えば○○社の販促アプリケーションで、○○社以外のコンテンツが閲覧できるのが問題だ。または、特定の競合先である△△社のウェブページを見せたくないという要望が上がってくるかもしれません。
WebBrowserコントロールでは、ページの遷移前にNavigatingイベントが発生します。特定の条件が満たされなかった場合など、イベントハンドラに渡されるNavigatingEventArgsオブジェクトのCancelプロパティを「True」に設定することで遷移をキャンセルすることが可能です。
テストに使用したページは、以下のように普通のリンク先が2件、2ちゃんねる関係のリンクが2件あるHTMLファイルを用意しました。
<html> <body> <a href="http://ch3cooh.jp/">CH3COOH(酢酸)の実験室</a><br /> <a href="http://www.yahoo.co.jp/">Yahoo! JAPAN</a><br /> <a href="http://www.2ch.net/">2ちゃんねる</a><br /> <a href="http://hibari.2ch.net/smartphone/"> スマートフォン@2ch掲示板</a><br /> </body> </html>
テスト用ページをアプリで表示させてみました。
下記の例は、Navigatingイベントハンドラ内にてURLを判定し、2ch.netを含むページへの遷移をすべてキャンセルしています*1。
using System.Text.RegularExpressions; using Microsoft.Phone.Controls; using System.Windows; using System; using System.Windows.Navigation; namespace WebBrowserHookTest { public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { webBrowser.Navigate(new Uri("http://ch3cooh.jp/files/webbrowser_linkhook.html")); } private void webBrowser_Navigating(object sender, NavigatingEventArgs e) { // 2ちゃんねるドメインであればページ遷移させない if (Regex.IsMatch(e.Uri.Host, "(?:.*\\.)2ch\\.net$")) { MessageBox.Show("本アプリは2chの閲覧を許可していません!"); e.Cancel = true; } } } }
ページの遷移をキャンセルし、メッセージボックスで注意を促してみました。