【发布时间】:2018-01-01 20:33:59
【问题描述】:
我在资产文件夹中有一个 html 文件,我想将它加载到 webview 中。我想使用字符串而不是文件来替换文件的内容(只保留一个文件并更改我想要显示的内容)。 比如我的html文件是这样的:
<!DOCTYPE html>
<html>
<head>
<title>This is demo</title>
</head>
<body>
<p data-height="265" data-theme-id="0" data-slug-hash="dYPxYp" data-default-tab="html,result" data-user="sckarolos" data-embed-version="2" data-pen-title="SVG Shape Example" class="codepen">
See the Pen <a href="https://codepen.io/sckarolos/pen/dYPxYp/">SVG Shape Example</a>
by sckarolos (<a href="https://codepen.io/sckarolos">@sckarolos</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>
</body>
</html>
我有这两种方法可以从资产中读取 html 文件作为字符串并将其加载到 webview 中:
private String getHtmlFromAsset() {
InputStream is;
StringBuilder builder = new StringBuilder();
String htmlString = null;
try {
is = getAssets().open(htmlFilename);
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
htmlString = builder.toString();
}
} catch (IOException e) {
e.printStackTrace();
}
return htmlString;
}
/**
* Loads html page with the content.
*/
private void loadHtmlPage(WebView webView) {
String htmlString = getHtmlFromAsset();
if (htmlString != null) {
webView.loadDataWithBaseURL(null, htmlString, "text/html", "UTF-8", null);
}
else
Toast.makeText(this, "No such page", Toast.LENGTH_LONG).show();
}
在我的活动中,我像这样使用 webview:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
AssetManager assetManager = getAssets();
//try to display html content
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
loadHtmlPage(webView);
}
在调试时,我可以看到我的文件已成功读取,并且我的字符串具有 html 文件的内容。但是当我尝试在 webview 中加载它时,结果什么都没有。如果我尝试使用此加载本地 html 文件:
webView.loadUrl("file:///android_asset/myFile.html");
然后文件加载并显示成功。 我想我的错在于我使用从 getHtmlFromAsset 取回并传入 loadHtmlPage 的字符串的方式。
任何帮助将不胜感激。
【问题讨论】:
-
试试这个
webView.loadDataWithBaseURL("", htmlString, "text/html", "UTF-8", "");我想如果你使用null那么它会求助于'about:blank'。 -
感谢您的评论。如您所说,我尝试在 loadDataWithBaseURL 方法中使用“”而不是 null 但它不起作用,结果仍然相同,一个空的 webview。
标签: android html webview assets