11

アプリに HTML 広告を表示するために使用する WebView コンポーネントがあります。ユーザーが WebView で広告をクリックすると、外部ブラウザで広告リンクが開きます。それ、どうやったら出来るの?

WP7 ブラウザーからの OnNavigating のようなものが必要です。WebView の Tapped イベントを試しましたが、IsTapEnabled=true に設定しても呼び出されません。次のようなものが必要です

4

2 に答える 2

20

これには ScriptNotify イベントを使用する必要があります。シナリオをどのように処理したかを次に示します (NavigateToString を使用)。URL から Web ビューのコンテンツを取得する場合、これが機能するように HTML を変更できる必要があります。

  1. 次の Javascript コードを 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>
    

    これにより、ページ上のすべてのリンク (<a href="..."></a>) に onclick ハンドラーが追加されます。window.external.notify は、Webview で機能する Javascript メソッドです。

  2. ScriptNotify イベント ハンドラーを Web ビューに追加します。

    WebView.ScriptNotify += WebView_ScriptNotify;
    
  3. イベント ハンドラーを宣言する

    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.
        }
    }
    

外部 URL を使用している場合は、これを webview の許可された Uris ホワイトリスト ( http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml. controls.webview.scriptnotify参照)。

于 2012-10-06T14:09:22.930 に答える
12

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);
        }
    }
于 2014-05-06T07:47:22.790 に答える