26

Cargo un archivo html local (desde la carpeta de activos) a la aplicación WebView. En el HTML ejecuto un jQuery.getJSON (url). la url es un servidor remoto.WebView JavaScript dominio cruzado de un archivo HTML local

Esta acción falla, y supongo que debido a un problema de origen diferente (dominio cruzado). Ejecuto el mismo archivo en Chrome y allí específicamente lo dice.

¿Hay alguna manera de permitir que WebView en Android cargue datos del servidor remoto en un archivo HTML cargado localmente?

+1

¿Has intentado agregar "& jsoncallback =?" o "devolución de llamada =?" a tu URL? – Zakaria

+0

¿Has probado con el método ".ajax" en lugar de "getJSON"? con ".ajax", si pones las opciones "data-type: jsonp", ¡debería funcionar para ti! – Zakaria

+0

¿El servidor remoto no necesitará específicamente apoyar JSONP para que funcione? No estoy muy familiarizado con las reglas de las vistas web, ¿son diferentes de los navegadores de escritorio? – mattacular

Respuesta

0

que carga un archivo HTML local (desde la carpeta de activos) a la vista Web aplicación

Tenga en cuenta que usted no pudo decir lo que está haciendo esto. Voy a adivinar que fue por un loadUrl() en una URL file:///android_asset.

¿Hay alguna manera de permitir que WebView en Android cargue datos del servidor remoto en un archivo HTML cargado localmente?

Intente utilizar loadDataWithBaseURL() para cargar el contenido, proporcionando una URL en el servidor remoto como la URL base.

0

Las llamadas Ajax no funcionan desde el sistema de archivos local. Más se convertirá en dominio cruzado. Entonces no funcionará. Funcionó en eclipse, porque lo intentó desde el servidor local.

2

No se olvide de agregar el permiso a internet en el archivo de manifiesto:

<uses-permission android:name="android.permission.INTERNET"/> 

También asegúrese de que está utilizando solicitudes JSONP (? No se olvide de la devolución de llamada & = como se ha dicho)

50

Hoy en la mañana encontré una solución que parece estar funcionando.

El Java parte

inicializar su WebView:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout); 

obtener configuración WebView:

WebSettings settings = _webView.getSettings(); 

ajustar la siguiente configuración:

settings.setJavaScriptEnabled(true); 
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule 
settings.setAllowUniversalAccessFromFileURLs(true); 

ahora se puede cargar el archivo HTML a modo estándar:

_webView.loadUrl("file:///android_asset/www/index.html"); 

El Javascript parte

Crear solicitud XHR de manera estándar

var xhr = new XMLHttpRequest(); 
xhr.open("get", "http://google.com", false); 
xhr.send(); 

Imprime el resultado en algún lado

document.body.innerHTML = xhr.responseText 

AVISO: Este procedimiento sólo funciona en el nivel API 16 o superior (al menos la documentación dice que).

+2

De acuerdo con la documentación para setAllowFileAccessFromFileURLs y setAllowUniversalAccessFromFileURLs, solían establecerse en true para ICS y versiones anteriores. Comenzando en JellyBean, lo apagaron. Si está intentando cargar un archivo JS local desde una página HTML local, deberá habilitarlos. – Steven

+0

Obtenga lo siguiente: NETWORK_ERR: excepción XMLHTTPRequest 101 – Codebeat

+1

Perfecto, funciona bien :) –

0

Una solución que usamos era usar Android para obtener los archivos de actualización del servidor, colocarlos y sobrescribir los archivos en la carpeta web, y luego explorar.

Cuestiones relacionadas