Android WebView JavaScript из активов - PullRequest
       30

Android WebView JavaScript из активов

25 голосов
/ 23 февраля 2012

Как я могу сделать так, чтобы JavaScript и изображения на моей удаленной HTML-странице загружались из папки ресурсов (или просто из любого локального ресурса)?

Ответы [ 2 ]

43 голосов
/ 24 февраля 2012

Ответ:
1. Вы ДОЛЖНЫ загрузить HTML в строку:

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. Загрузите WebView с базовым URL:

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

В этом конкретном случае у вас должны быть все файлы .js, которые вы хотите использовать на странице, чтобы они находились где-то в папке «assets» проекта. Например:

/MyProject/assets/jquery.min.js


3. На удаленной html-странице вы должны загрузить файлы .js и .css, которые находятся в вашем приложении, например:

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

то же самое относится ко всем другим локальным ресурсам, таким как изображения и т. Д., Их путь должен начинаться с

file:///android_asset/

WebView сначала загрузит необработанный HTML, который вы предоставили в виде строки, затем выберет .js, .css и другие локальные ресурсы, а затем загрузит удаленный контент.

2 голосов
/ 03 марта 2013

Если вы динамически создаете ваш HTML, а затем используете loadDataWithBaseURL, убедитесь, что все локальные ресурсы, например, javascript в вашей папке с активами упоминается в HTML как file: /// (я потратил часы на это)

...