2012-10-03 234 views
11

我有一個WebView組件,用於在我的應用程序中顯示HTML廣告。當用戶點擊WebView中的廣告時,我想在外部瀏覽器中打開廣告鏈接。我怎麼做?在WebView中的外部瀏覽器中打開鏈接(WinRT)

我需要WP7瀏覽器的OnNavigating之類的東西。我嘗試了WebView的Tapped事件,但即使設置了IsTapEnabled = true,它也永遠不會被調用。我需要類似

回答

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> 
    

    這增加了一個onclick處理程序的每一個環節(< A HREF = 「...」 > < /一>)。 window.external.notify是一個在Webview中工作的Javascript方法。

  2. 將ScriptNotify事件處理程序添加到webview。

    WebView.ScriptNotify += WebView_ScriptNotify; 
    
  3. 聲明事件處理程序,你,如果你正在使用外部URL

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

注意,這已被添加到的WebView允許尤里斯白名單(http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify僅供參考) 。

+0

但是超鏈接到文件呢?這不起作用http://stackoverflow.com/questions/28886198/hyperlink-click-is-not-firing/ –

+0

在這種情況下,嘗試更改UriKind.Absolute UriKind.Relative – 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

謝謝!這對我有效。 –

相關問題