studio - javascript webview android
WebView Javascript cruza el dominio desde un archivo HTML local (5)
Cargo un archivo html local (de la carpeta de activos) a la aplicación WebView
Tenga en cuenta que no pudo decir cómo está haciendo esto. Voy a adivinar que fue por un loadUrl()
en un file:///android_asset
URL de file:///android_asset
.
¿Hay alguna manera de permitir que WebView en Android cargue datos desde un servidor remoto en un archivo HTML local cargado?
Intente usar loadDataWithBaseURL()
para cargar el contenido, suministrando una URL en el servidor remoto como la URL base.
Cargo un archivo html local (de la carpeta de activos) a la aplicación WebView. En el HTML ejecuto un jQuery.getJSON (url). la url es un servidor remoto
Esta acción falla y supongo que debido a un problema de origen diferente (dominio cruzado). Ejecuto el mismo archivo en Chrome y ahí lo dice específicamente.
¿Hay alguna manera de permitir que WebView en Android cargue datos desde un servidor remoto en un archivo HTML local cargado?
Hoy por la mañana encontré una solución que parece estar funcionando.
La parte de Java
Inicialice su WebView:
WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout);
obtener la configuración de WebView:
WebSettings settings = _webView.getSettings();
establecer las siguientes configuraciones:
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don''t need this rule
settings.setAllowUniversalAccessFromFileURLs(true);
Ahora puedes cargar tu archivo html de forma estándar:
_webView.loadUrl("file:///android_asset/www/index.html");
La parte de Javascript
Crear solicitud XHR de forma estándar.
var xhr = new XMLHttpRequest();
xhr.open("get", "http://google.com", false);
xhr.send();
Imprime el resultado en alguna parte
document.body.innerHTML = xhr.responseText
AVISO: este procedimiento funciona solo en el nivel de API 16 o superior (al menos la documentación lo dice).
Las llamadas ajax no funcionan desde el sistema de archivos local. Más sobre esto se convertirá en dominio cruzado. Así que no funcionará. Funcionó en eclipse, porque lo intentaste desde un servidor local.
No olvide agregar el permiso de Internet en su archivo de manifiesto:
<uses-permission android:name="android.permission.INTERNET"/>
Asegúrese también de que está utilizando solicitudes JSONP (no olvide el & callback =? Como se indica anteriormente)
Una solución que utilizamos fue utilizar Android para obtener los archivos de actualización del servidor, colocarlos y sobrescribir los archivos en la carpeta web y luego explorar.