2011-04-12 30 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

相关问题