studio javascript android cross-domain android-webview same-origin-policy

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.