私は私のアプリにHTML広告を表示するために使用するWebViewコンポーネントを持っています。ユーザーがWebViewで広告をクリックすると、外部のブラウザで広告リンクを開きます。それ、どうやったら出来るの?WebView(WinRT)の外部ブラウザでリンクを開く
私はWP7ブラウザからOnNavigatingのようなものが必要です。 WebViewのTappedイベントを試しましたが、IsTapEnabled = trueに設定しても決して呼び出されません。私は何かが必要です
私は私のアプリにHTML広告を表示するために使用するWebViewコンポーネントを持っています。ユーザーがWebViewで広告をクリックすると、外部のブラウザで広告リンクを開きます。それ、どうやったら出来るの?WebView(WinRT)の外部ブラウザでリンクを開く
私はWP7ブラウザからOnNavigatingのようなものが必要です。 WebViewのTappedイベントを試しましたが、IsTapEnabled = trueに設定しても決して呼び出されません。私は何かが必要です
これにはScriptNotifyイベントを使用する必要があります。 NavigateToStringを使用してシナリオを処理した方法は次のとおりです。 URLからWebビューのコンテンツを取得する場合、これを動作させるにはHTMLを変更できる必要があります。
あなたのHTMLに
<script type="text/javascript">for (var i = 0; i < document.links.length; i++) { document.links[i].onclick = function() { window.external.notify('LaunchLink:' + this.href); return false; } }</script>
を次のJavaScriptコードを追加します。これは、すべてのリンクにonclickのハンドラを追加します(= < HREF "..." > </>)ページで。 window.external.notifyは、Webviewで動作するJavascriptメソッドです。
ScriptNotifyイベントハンドラをwebviewに追加します。
WebView.ScriptNotify += WebView_ScriptNotify;
イベントハンドラにあなたが外部のURLを使用している場合は、これはWebViewのの許可のURIホワイトリストに追加する(参照用http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify)を持っていることを
async private void WebView_ScriptNotify(object sender, NotifyEventArgs e)
{
try
{
string data = e.Value;
if (data.ToLower().StartsWith("launchlink:"))
{
await Launcher.LaunchUriAsync(new Uri(data.Substring("launchlink:".Length), UriKind.Absolute));
}
}
catch (Exception)
{
// Could not build a proper Uri. Abandon.
}
}
注意を宣言。
NavigationStartingイベントの処理を試みます。 URLの読み込みを傍受して取り消すことができます。 Webビューで開くリンクと、デフォルトのブラウザで開くリンクをフィルタリングできます。
private async void webView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
if(null != args.Uri && args.Uri.OriginalString == "URL OF INTEREST")
{
args.Cancel = true;
await Launcher.LaunchUriAsync(args.Uri);
}
}
ありがとう!これは私のために働いた。 –
ファイルへのハイパーリンクはどうですか?これは動作しませんhttp://stackoverflow.com/questions/28886198/hyperlink-click-is-not-firing/ –
その場合、UriKind.AbsoluteをUriKindに変更してみてください。 – Akinwale