web-dev-qa-db-fra.com

Android WebView JavaScript des ressources

Comment puis-je charger du JavaScript et des images sur ma page HTML distante à partir du dossier des ressources (ou de n'importe quelle ressource locale)?

25
tomurka

Répondre:
1. Vous DEVEZ charger le HTML dans la chaîne:

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. Chargez WebView avec l'URL de base:

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

Dans ce cas particulier, vous devriez avoir tous les fichiers .js que vous souhaitez utiliser sur la page pour résider quelque part dans le dossier "assets" du projet. Par exemple:

/MyProject/assets/jquery.min.js


3. Dans votre page html distante, vous devez charger les fichiers .js et .css qui résident dans votre application comme:

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

il en va de même pour toutes les autres ressources locales comme les images, etc. leur chemin doit commencer par

file:///Android_asset/

Une WebView chargerait d'abord le code HTML brut que vous avez fourni sous forme de chaîne, puis choisirait .js, .css et d'autres ressources locales, puis chargerait le contenu distant.

43
tomurka

Si vous créez dynamiquement votre code HTML puis utilisez loadDataWithBaseURL, assurez-vous que toutes les ressources locales, par exemple javascript dans votre dossier d'actifs sont appelés dans le HTML comme fichier: /// (j'ai passé des heures à travailler cela)

2
MLP