2012-02-23 20 views
21

¿Cómo puedo hacer que JavaScript y las imágenes en mi página HTML remota se carguen desde la carpeta de activos (o cualquier recurso local)?Android WebView JavaScript desde los recursos

+2

Debe poner la respuesta en una respuesta para que podamos marcar esto como cerrado. –

Respuesta

35

Respuesta:
1. Se debe cargar el HTML en cadena:

private String readHtml(String remoteUrl) { 
    String out = ""; 
    BufferedReader in = null; 
    try { 
     URL url = new URL(remoteUrl); 
     in = new BufferedReader(new InputStreamReader(url.openStream())); 
     String str; 
     while ((str = in.readLine()) != null) { 
      out += str; 
     } 
    } catch (MalformedURLException e) { 
    } catch (IOException e) { 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return out; 
} 


2. Cargar vista web con URL base:

String html = readHtml("http://mydomain.com/my.html"); 
mWebView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", ""); 

En este caso particular, usted debe tener todos los archivos .js que desee utilizar en la página para residir en algún lugar en la carpeta de "activos" del proyecto. Por ejemplo:

/MyProject/assets/jquery.min.js 


3. En su página html a distancia tiene que cargar .js y .css que residen en su aplicación como:

<script src="file:///android_asset/jquery.min.js" type="text/javascript"></script> 

lo mismo se aplica a todos los demás locales recursos como imágenes, etc. su camino tiene que empezar con

file:///android_asset/ 

Una vista web se cargue primero el HTML puro que haya proporcionado como una cadena, a continuación, elegir .js, .css y otros recursos locales y luego cargarían contenido remoto.

+4

¿Por qué debería tener que proporcionar la ruta absoluta si establece la ruta base con 'loadDataWithBaseURL'? Además, parece que esto se rompe en 4.1+. :( – Maarten

+0

Esto parece funcionar en 4.1+ para mí, y hasta ahora es la única forma en que he podido cargar HTML con javascript que no está codificado en la carpeta de activos. – Chris

+0

Si el html ya está remoto, no hay posibilidad para editar el programa debe identificar estos archivos y reemplazar la cadena de * String html * – htafoya

2

Si crea dinámicamente su HTML y luego utiliza loadDataWithBaseURL, asegúrese de que todos los recursos locales, p. javascript en su carpeta de activos se mencionan en el HTML como archivo: /// (I Pasé horas resolviendo esto)

+0

¿me puede decir en detalle cómo agregar dinámicamente la ruta (archivo: //) a .js después de obtener html como cadena? – Adi

Cuestiones relacionadas