27

How can I make JavaScript and images on my remote HTML page be loaded from assets folder (or just any local resource)?

0

2 Answers 2

47

Answer:
1. You MUST load the HTML into string:

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. Load WebView with base URL:

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

In this particular case you should have all .js files you want to use on the page to reside somewhere under "assets" folder of project. For example:

/MyProject/assets/jquery.min.js


3. In your remote html page you have to load .js and .css files that reside in your application like:

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

the same applies to all other local resources like images, etc. their path has to start with

file:///android_asset/

A WebView would first load the raw HTML you have provided as string, then pick .js, .css and other local resourses and then would load remote content.

Sign up to request clarification or add additional context in comments.

7 Comments

Why should you have to provide the absolute path if you set the base path with loadDataWithBaseURL? Furthermore, it seems that this breaks in 4.1+. :(
This seems to work in 4.1+ for me, and is so far the only way I've been able to load HTML with javascript that isn't hardcoded into the assets folder.
If the html is already remote with no possibility to edit the program should identify these files and replace the string from the String html
In this solution if webpage contains images, then no images will be loaded.
How can we implement this on postURL method
|
2

If dynamically creating your HTML and then using loadDataWithBaseURL make sure any local resources e.g. javascript in your assets folder are referred to in the HTML as file:/// (I Spent hours working this out)

1 Comment

can you please tell me in detail how to dynamically add (file://) path to .js after getting html as string.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.