2012-02-23 13 views
21

Come è possibile caricare JavaScript e immagini sulla mia pagina HTML remota dalla cartella delle risorse (o semplicemente da una risorsa locale)?WebView Android JavaScript dalle risorse

+2

È necessario inserire la risposta in una risposta in modo da poter contrassegnare questo chiuso. –

risposta

35

Risposta:
1. è necessario caricare il codice HTML in stringa:

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. Carico WebView con URL di base:

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

In questo caso particolare si dovrebbe avere tutti i file .js che si desidera utilizzare nella pagina per risiedere da qualche parte nella cartella "assets" del progetto. Per esempio:

/MyProject/assets/jquery.min.js 


3. Nella tua pagina html a distanza è necessario caricare js e file css che risiedono nella vostra applicazione, come:

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

lo stesso vale per tutti gli altri locali risorse come immagini, ecc loro percorso deve iniziare con

file:///android_asset/ 

Un WebView avrebbe prima caricare il codice HTML grezzo che ci avete fornito come stringa, poi scegliere .js, css e altre risorse locali e quindi caricare i contenuti remoti.

+4

Perché dovresti fornire il percorso assoluto se imposti il ​​percorso di base con 'loadDataWithBaseURL'? Inoltre, sembra che questo si rompa in 4.1+. :( – Maarten

+0

Questo sembra funzionare in 4.1+ per me, ed è finora l'unico modo in cui sono stato in grado di caricare HTML con javascript che non è codificato nella cartella delle risorse. – Chris

+0

Se l'html è già remoto senza possibilità per modificare il programma è necessario identificare questi file e sostituire la stringa dal * String html * – htafoya

2

Se si crea dinamicamente il codice HTML e quindi si utilizza loadDataWithBaseURL, assicurarsi che tutte le risorse locali, ad es. javascript nella cartella delle risorse sono indicati nell'HTML come file: /// (I ore trascorse a risolverlo)

+0

puoi dirmi in dettaglio come aggiungere dinamicamente (file: //) percorso a .js dopo aver ottenuto html come stringa. – Adi

Problemi correlati