2012-10-03 12 views
11

Uygulamamda HTML Reklamları görüntülemek için kullandığım bir WebView bileşenim var. Kullanıcı WebView'de bir Reklamı tıkladığında, harici bir tarayıcıda Reklam bağlantısını açmak istiyorum. Bunu nasıl yaparım?WebView'da (WinRT) harici tarayıcıda bağlantıları aç

WP7 tarayıcısından OnNavigating gibi bir şeye ihtiyacım var. WebView'ın Tapped etkinliğini denedim ancak IsTapEnabled = true değerini ayarladığım zaman bile asla çağrılmıyor.

cevap

20

gibi bir şeye ihtiyacım var Bunun için ScriptNotify olayını kullanmanız gerekecek. Senaryoyu nasıl ele aldım (NavigateToString kullanarak). Web görünümü içeriğini bir URL'den alıyorsanız, bunun çalışması için HTML'yi değiştirebilmeniz gerekir.

  1. (= < a href "..." > </a >) HTML'nize

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

    Bu, her bağlantıya bir tıklamada işlevi ekler için aşağıdaki JavaScript kodu ekleyin sayfasında. window.external.notify, Web görünümünde çalışan bir Javascript yöntemidir.

  2. ScriptNotify olay işleyicisini web görünümüne ekleyin.

    WebView.ScriptNotify += WebView_ScriptNotify; 
    
  3. olay işleyicisi size harici bir URL kullanıyorsanız

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

Not bildirmek bu WebView izin Uris beyaz listesine eklenmelidir (http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify referans için) .

+0

ancak dosyalara köprü nedir? Bu işe yaramaz http://stackoverflow.com/questions/28886198/hyperlink-click-is-not-firing/ –

+0

Bu senaryoda UriKind.Absolute öğesini UriKind.Relative değiştirmeye çalışın. – Akinwale

10

NavigationStarting olayını işlemeye çalışın. Buradan URL'nin yüklenmesini engelleyebilir ve iptal edebilirsiniz. Web görünümünde açmak ve varsayılan tarayıcıda açılacak bağlantıyı filtreleyebilirsiniz.

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

Teşekkürler! Bu benim için çalıştı. –