2013-03-12 207 views
5

是否可以檢查用戶是否點擊了具有target =「_ blank」的html鏈接。Android WebView:確定<a> target =「_ blank」

我想要做的是在我的應用程序在WebView中顯示htlm,但在Android默認瀏覽器中啓動「外部」鏈接。一個「外部」鏈接對我來說就是一個target =「_ blank」的鏈接。 所有其他鏈接應該在web視圖中處理。

因此,例如:在我的WebView這樣的鏈接用戶點擊:

<a href="http://www.google.com" target="_blank">new window</a> 

,然後我想在Android瀏覽器中打開指定的網址。

我試着用shouldOverrideUrlLoading(),但在這一點上,我不能確定,如果目標是「_blank」或正常的鏈接(沒有目標)。

我也試過setSupportMultipleWindows(true);結合使用onCreateWindow(), ,但在此回調中,我無法獲取網址。

我不能改變顯示的HTML,所以我不能使用JavaScript橋addJavascriptInterface()

我還能做什麼?任何其他想法?

+0

最後你是怎麼修好的? – Sagar 2016-11-11 05:55:44

回答

1

你可以做到以下幾點:(醜陋但將工作)

內onPageFinished(),注入的JavaScript代碼片段插入其中確實有點像頁:上的所有元素

  1. 迭代與目標= _blank屬性
  2. 變化在href這些元素到外部:// [原始HREF]

如果網站使用jquery,它應該很容易。如果沒有,你仍然可以使用標準的DOM Javascript來做到這一點。

on yourOverrideUrlLoading(),尋找那些external:// *鏈接並在外部打開它們。

爲了注入的JavaScript,請執行以下操作:

webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()"); 
3

我只是解決了這個問題我自己。這是我如何解決它。

mWebView.setWebChromeClient(new WebChromeListener() { 
    @Override 
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { 
     WebView newWebView = new WebView(view.getContext()); 
     newWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(browserIntent); 
       return true; 
      } 
     }); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(newWebView); 
     resultMsg.sendToTarget(); 
     return true; 
    } 
}); 
+0

雖然這有一個問題,但是在您第一次打開這樣的鏈接時它會打開,但下次點擊不會執行任何操作(大多數的時間)。在兩臺設備上測試過。它在我去掉'newWebView'的時候工作,也就是在'shouldOverrideUrlLoading'方法中調用'Handler.postDelayed(xxx,200);''xxx'是一個可運行的函數,你可以在其中調用'destroy()'方法'newWebView'。 – jadkik94 2017-03-03 13:24:12

相關問題