2011-04-12 12 views
10

Estoy usando un WebView para mostrar una página en la que el html incluye un iframe donde src = "xxxxx.php".¿Cómo obtener el enlace del iframe de Webview para iniciar el navegador?

Este iframe se carga como una imagen de anuncio con un enlace subyacente. Si hago clic en esa imagen (enlace), intenta cargar la nueva página dentro del iframe original (que no muestra mucho en ese espacio pequeño). Lo que quiero que pase es hacer clic en el enlace para abrir la página referida en una nueva ventana del navegador, dejando mi aplicación tal como está.

Si uso el navegador de Android para mostrar la página original y hago clic en este iframe, carga el enlace como una nueva página. ¿Cómo obtengo el mismo comportamiento con un WebView? El uso de un WebViewClient con shouldOverrideUrlLoading() no parece ser invocado por el enlace de iframe.

Respuesta

15

Tuve un problema similar con los anuncios de google en una fuente de WebView, ya que también se cargan en un iframe. Se trata de cómo lo resolví:

probar este en su WebViewClient, normalmente bajo su 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

estoy un poco confundido por su respuesta. Mencionas 'shouldOverrideUrlLoading()', pero en tu código usas 'onLoadResource()'. – ThomasW

+0

Ledgend! gracias por este fragmento! Thomas, Ignore la referencia a shouldOverrideUrlLoading(), creo que acidxwarp refería physical en el archivo java. Simplemente anule onLoadResource, y compruebe el resultado de hittest antes de disparar nuevos intentos – scottyab

+3

, esto en realidad no detecta el clic de iframe, ¿hay alguna posibilidad de que descubriera cómo detectar el clic en otra cosa que no sea googleads? –

5

puedo proponer una solución al código anterior:

@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

Para detectar enlaces de clics dentro del iframe Los enlaces deben tener parámetros adicionales. He encontrado que:

  1. shouldOverrideUrlLoading del WebViewClient será ejecutado por un caso cuando el enlace iframe tiene objetivo parámetro target = "_ padre" o target = "_ top",
  2. onCreateWindow del WebViewClient, en el caso , si el enlace iframe contiene target = "_ blank" parámetro

Parece que los enlaces iframe sin parámetro de destino no es posible seguir exactamente a través de WebViewClient

Cuestiones relacionadas