En el desarrollo de Android, la vista web se usa a menudo para mostrar páginas web o páginas h5, lo cual es un problema en aspectos entre dominios.
1. Lectura de cookies entre dominios
¿Qué es un dominio cruzado? En pocas palabras, es un nombre de dominio diferente. Todos sabemos que en la PC usamos un navegador para acceder. la URL, diferentes URL Parte de la información de las cookies se almacenará localmente, de modo que se puedan implementar funciones como el inicio de sesión automático. Diferentes nombres de dominio en la PC no pueden leer la información de las cookies en otros dominios entre sí (desarrolladores no profesionales de la web, si lo comprende). está mal, por favor indíquelo).
Sin embargo, antes de API 23 en Android, las cookies se podían leer entre dominios. Por ejemplo, el dominio A escribe una cookie de ID de usuario y el dominio B puede leer el valor. Pero a las 23:00, el sistema establece el valor en falso y ya no permite la lectura entre dominios. ¿Qué debe hacer si su aplicación tiene requisitos de lectura entre dominios? Se puede habilitar de la siguiente manera:
/*** Establecer lectura de cookies entre dominios*/
public final void setAcceptThirdPartyCookies() {
//target 23 predeterminado falso, por lo que se establece manualmente en verdadero
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true
}?
}
2. Carga mixta http/https
En esta etapa, muchos sitios web se han cambiado a https para el acceso, y https puede mejorar. acceso La seguridad del sitio web evita el robo de información. Si todas las páginas web son https y los enlaces dentro de las páginas web también son https, entonces no habrá problemas de carga mixta (área de texto https, carga de archivos de imagen http). Sin embargo, muchos recursos no se han cambiado al acceso https en esta etapa y los enlaces http a menudo están incrustados en las páginas. Si este tipo de página web mixta no se procesa, se producirán errores cuando se cargue directamente. ¿Cómo solucionar este problema?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {?
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
} p>
p>
Esta también es una función versionada. Antes de api23, la carga mixta era posible de forma predeterminada, pero en 23, el valor predeterminado se cambió a MIXED_CONTENT_NEVER_ALLOW, por lo que si tiene requisitos de carga mixta, establezca setMixedContentMode en. MIXED_CONTENT_ALWAYS_ALLOW.
3. El problema de acceso entre dominios no se puede resolver. Puede intentar establecer la siguiente configuración para la vista web, que ha resuelto el problema
if (Build.VERSION. SDK_INT >= 16) {
p>Clase clazz =webView.getSettings().getClass();
Método método = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class) ;
if ( método != null) {
método.invoke(webView.getSettings(), true);
}
}
} captura (IllegalArgumentExceptione) {
e.printStackTrace();
} captura (NoSuchMethodExceptione) {
e. printStackTrace();
} captura (IllegalAccessException e) {
e.printStackTrace();
} captura (InvocationTargetException e) {
e.printStackTrace();
}