2012-10-03 34 views
11

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

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

答えて

20

これにはScriptNotifyイベントを使用する必要があります。 NavigateToStringを使用してシナリオを処理した方法は次のとおりです。 URLからWebビューのコンテンツを取得する場合、これを動作させるにはHTMLを変更できる必要があります。

  1. あなたの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メソッドです。

  2. ScriptNotifyイベントハンドラをwebviewに追加します。

    WebView.ScriptNotify += WebView_ScriptNotify; 
    
  3. イベントハンドラにあなたが外部の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. 
        } 
    } 
    

注意を宣言。

+0

ファイルへのハイパーリンクはどうですか?これは動作しませんhttp://stackoverflow.com/questions/28886198/hyperlink-click-is-not-firing/ –

+0

その場合、UriKind.AbsoluteをUriKindに変更してみてください。 – Akinwale

10

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); 
     } 
    } 
+0

ありがとう!これは私のために働いた。 –

関連する問題