2011-04-12 29 views
10

我正在使用WebView來顯示一個頁面,其中html包含一個iframe,其中src =「xxxxx.php」。如何獲取Webview iframe鏈接來啓動瀏覽器?

此iframe加載爲帶有底層鏈接的廣告圖片。如果我點擊該圖像(鏈接),它會嘗試將新頁面加載到原始iframe中(這在很小的空間中不會顯示太多)。我想要發生的事情是點擊鏈接在新的瀏覽器窗口中打開引用的頁面,將我的應用保持原樣。

如果我使用Android瀏覽器顯示原始頁面並單擊此iframe,它會將鏈接加載爲新頁面。如何使用WebView獲得相同的行爲?使用帶有shouldOverrideUrlLoading()的WebViewClient似乎沒有被iframe鏈接調用。

回答

15

我在WebView源代碼中遇到了與谷歌廣告類似的問題,因爲它們也加載到了iframe中。這是我如何解決它:

試試這個在您的WebViewClient,通常在您的shouldOverrideUrlLoading()

  @Override 
      public void onLoadResource (WebView view, String url) { 
       if (url.contains("googleads")) { 
        if(view.getHitTestResult().getType() > 0){ 
         view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
         view.stopLoading(); 
         Log.i("RESLOAD", Uri.parse(url).toString()); 
        } 
       } 
      } 
+1

跟蹤正好我有點被你的答案感到困惑。你提到'shouldOverrideUrlLoading()',但在你的代碼中你使用'onLoadResource()'。 – ThomasW 2011-09-13 02:02:08

+0

Ledgend!感謝這個片段!托馬斯,忽略參考shouldOverrideUrlLoading(),我認爲acidxwarp是指在java文件中的物理。只需重寫onLoadResource,並在發射新的intent – scottyab 2012-02-02 17:09:20

+3

傢伙之前檢查hittestresult,這實際上並沒有檢測到iframe點擊,你有沒有想到如何檢測其他東西不是googleads的點擊? – 2012-09-15 10:42:01

5

我可以提出一個修正以前的代碼:

@Override 
    public void onLoadResource (WebView view, String url) { 
     if (url.contains("googleads")) { 
      if(view.getHitTestResult() != null && 
        (view.getHitTestResult().getType() == HitTestResult.SRC_ANCHOR_TYPE || 
        view.getHitTestResult().getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)){ 
       view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
       view.stopLoading(); 
      } 
     } 
    } 
0

爲了檢測鏈接的點擊在iframe中。鏈接應該有其他參數。我發現:

  1. 的WebViewClient的shouldOverrideUrlLoading會爲當IFRAME鏈接有目標參數目標=「_父」或目標=「_頂」的情況下被執行,
  2. 的WebViewClient的onCreateWindow,萬一如果IFRAME鏈接包含目標=「_空白」參數

似乎沒有目標參數不可能的iframe鏈接通過WebViewClient

相關問題