【发布时间】:2012-03-13 22:23:19
【问题描述】:
如何使远程 HTML 页面上的 JavaScript 和图像从资产文件夹(或任何本地资源)加载?
【问题讨论】:
标签: javascript android local assets
如何使远程 HTML 页面上的 JavaScript 和图像从资产文件夹(或任何本地资源)加载?
【问题讨论】:
标签: javascript android local assets
回答:
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 和其他本地资源,然后加载远程内容。
【讨论】:
loadDataWithBaseURL 设置基本路径,为什么必须提供绝对路径?此外,这似乎在 4.1+ 中中断。 :(
如果动态创建您的 HTML,然后使用 loadDataWithBaseURL 确保任何本地资源,例如您的资产文件夹中的 javascript 在 HTML 中称为 file:///(我花了几个小时来解决这个问题)
【讨论】: