Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自资产的Android WebView JavaScript_Javascript_Android_Local_Assets - Fatal编程技术网

来自资产的Android WebView JavaScript

来自资产的Android WebView JavaScript,javascript,android,local,assets,Javascript,Android,Local,Assets,如何使远程HTML页面上的JavaScript和图像从资产文件夹(或任何本地资源)加载?回答: 1.必须将HTML加载到字符串中: private String readHtml(String remoteUrl) { String out = ""; BufferedReader in = null; try { URL url = new URL(remoteUrl); in = new BufferedReader(new Inpu

如何使远程HTML页面上的JavaScript和图像从资产文件夹(或任何本地资源)加载?

回答:
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文件都放在project的“资产”文件夹下。例如:

/MyProject/assets/jquery.min.js

3.在远程html页面中,您必须加载驻留在应用程序中的.js和.css文件,如:

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

WebView将首先加载您作为字符串提供的原始HTML,然后选择.js、.css和其他本地资源,然后加载远程内容。

如果动态创建HTML,然后使用loadDataWithBaseURL,请确保您的资产文件夹中的任何本地资源(例如javascript)在HTML中被称为文件:///(我花了几个小时来解决这个问题)

如果使用
loadDataWithBaseURL
设置基本路径,为什么必须提供绝对路径?此外,这似乎在4.1+中有所突破:(对我来说,这似乎在4.1+中起作用,并且是迄今为止我能够用javascript加载HTML的唯一方法,该javascript没有硬编码到assets文件夹中。如果HTML已经是远程的,无法编辑,程序应该识别这些文件并替换字符串htmlIn。如果网页包含图像,则没有images将被加载。我们如何在Posterl方法上实现这一点?您能否详细告诉我,在获取html作为字符串后,如何将(文件://)路径动态添加到.js。
file:///android_asset/