2012-10-03 10 views
11

Mam składnik WebView, którego używam do wyświetlania reklam HTML w mojej aplikacji. Gdy użytkownik kliknie reklamę w WebView, chcę otworzyć link reklamy w zewnętrznej przeglądarce. Jak mogę to zrobić?Otwarte linki w zewnętrznej przeglądarce w WebView (WinRT)

Potrzebuję czegoś takiego jak OnNavigating z przeglądarki WP7. Próbowałem zdarzenia Tapped w WebView, ale nigdy nie zostanie ono wywołane, nawet jeśli ustawię IsTapEnabled = true. Potrzebuję czegoś takiego jak

Odpowiedz

20

Będziesz musiał użyć zdarzenia ScriptNotify dla tego. Oto jak poradziłem sobie ze scenariuszem (używając NavigateToString). Jeśli pobierasz treść widoku internetowego z adresu URL, będziesz musiał zmodyfikować kod HTML, aby działał.

  1. Dodaj następujący kod JavaScript do kodu 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> 
    

    To dodaje obsługi onclick do każdego ogniwa (< a href = "..." > </rok >) na stronie. window.external.notify to metoda JavaScript, która działa w widoku Web.

  2. Dodaj obsługę zdarzeń ScriptNotify do widoku WWW.

    WebView.ScriptNotify += WebView_ScriptNotify; 
    
  3. stwierdzenie obsługi zdarzeń

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

pamiętać, że jeśli używasz zewnętrznego URL, to musi być dodany do Webview pozwoliło Uris białej listy (http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify dla porównania) .

+0

ale co z hiperłączem do plików? to nie działa http://stackoverflow.com/questions/28886198/hyperlink-click-is-not-firing/ –

+0

W tym scenariuszu spróbuj zmienić UriKind.Absolute na UriKind.Relative – Akinwale

10

Spróbuj poradzić sobie z zdarzeniem NavigationStart. Tutaj możesz przechwycić i anulować ładowanie adresu URL. Możesz filtrować, który link ma otwierać się w widoku internetowym i który otworzyć w domyślnej przeglądarce.

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

Dzięki! To działało dla mnie. –

Powiązane problemy