Search code examples
javascriptandroidlocalassets

Android WebView JavaScript from assets


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


Solution

  • 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.