web-dev-qa-db-ja.com

AndroidアセットからのWebView JavaScript

リモートHTMLページのJavaScriptと画像を、アセットフォルダー(またはローカルリソースのみ)からロードするにはどうすればよいですか?

25
tomurka

回答:
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。ベースURLでWebViewをロードします。

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およびその他のローカルリソースを選択してから、リモートコンテンツをロードします。

43
tomurka

HTMLを動的に作成してからloadDataWithBaseURLを使用する場合は、ローカルリソースを確認してください。アセットフォルダー内のjavascriptは、HTMLではfile:///として参照されます(私はこの作業に何時間も費やしました)

2
MLP