studio example codigo chrome app android webview android-webview

example - webview android studio 2017



Android WebView no carga contenido mixto (4)

Recientemente he migrado de Crosswalk para usar el WebView nativo.

Tuve que luchar con este tema durante unas horas. La solución fue ejecutar clearCache () antes de establecer la configuración.

antes de

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);

Limpiar cache

webView.clearCache(false);

Estoy intentando crear una aplicación con WebView, pero el sitio web usa https , pero el contenido (por ejemplo, el archivo mp3) usa http , por lo que Android Lollipop no lo carga porque es "Contenido mixto". Intenté usar onReceivedSslError handler.proceed(); , pero no carga nada. ¿Hay alguna forma de arreglarlo? ¿O podría simplemente hacer que todos los sitios web cargados utilicen http , para que no muestre ningún error?


Si su API mínima es inferior a 21 y no puede llamar a setMixedContentMode directamente, puede usar la reflexión:

try { Method m = WebSettings.class.getMethod("setMixedContentMode", int.class); if ( m == null ) { Log.e("WebSettings", "Error getting setMixedContentMode method"); } else { m.invoke(webView.getSettings(), 2); // 2 = MIXED_CONTENT_COMPATIBILITY_MODE Log.i("WebSettings", "Successfully set MIXED_CONTENT_COMPATIBILITY_MODE"); } } catch (Exception ex) { Log.e("WebSettings", "Error calling setMixedContentMode: " + ex.getMessage(), ex); }


para cargarlo condicionalmente en API> = 21, no tiene que usar la reflexión .

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); }


Desde Lollipop (API 21), WebView bloquea todo el contenido mixto de forma predeterminada .

Para cambiar este comportamiento, cuando esté apuntando a un nivel de API 21 o superior , use:

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);

En este modo, WebView intentará ser compatible con el enfoque de un navegador web moderno con respecto a contenido mixto. Se puede permitir que algunos contenidos inseguros se carguen por un origen seguro y se bloquearán otros tipos de contenido. Los tipos de contenido permitidos o bloqueados pueden cambiar de versión a versión y no están definidos explícitamente.

En la práctica, esto debería permitir la carga de imágenes, videos, música, etc.: todo contenido con poca probabilidad de ser una amenaza importante para la seguridad, cuando sea manipulado / reemplazado por un tercero malintencionado.

Alternativamente use (fuertemente desaconsejado) :

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

En este modo, WebView permitirá que un origen seguro cargue contenido desde cualquier otro origen, incluso si ese origen es inseguro. Este es el modo de operación menos seguro para WebView y, donde sea posible, las aplicaciones no deberían establecer este modo.