如何使远程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 文件都驻留在项目的 "assets" 文件夹下的某个位置。例如:/MyProject/assets/jquery.min.js
在您的远程HTML页面中,您需要加载存储在应用程序中的.js和.css文件,例如:<script src="file:///android_asset/jquery.min.js" type="text/javascript"></script>
对于所有其他本地资源(如图像等),同样适用。它们的路径必须以
开头。file:///android_asset/
WebView首先会加载您提供的原始HTML字符串,然后会选择.js、.css和其他本地资源,最后会加载远程内容。
loadDataWithBaseURL
设置了基础路径,为什么还需要提供绝对路径呢?此外,似乎在4.1版本以上出现问题。 - Maartenindex.html
(包含对index.js
文件的引用)位于 asset/www/ 文件夹中(与index.js
文件所在的位置相同)。我正在尝试将我的index.html
转换为字符串,但似乎它不起作用。readHtml
的返回值始终为""
。我做错了什么?! - McLan