我有一个应用程序有一些android 4.1/4.2用户报告webview没有呈现它的内容,但是它显示了源代码。
webview显示代码是相当标准的,而且对大多数用户来说都是正确的。
webView.setVisibility(View.VISIBLE);
webView.setVerticalFadingEdgeEnabled(false);
webView.setFadingEdgeLength(0);
webView.setFocusable(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!view.hasFocus()) {
view.requestFocus();
}
break;
}
return false;
}
});
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setGeolocationEnabled(true);
settings.setLoadWithOverviewMode(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
settings.setAllowUniversalAccessFromFileURLs(true);
}
settings.setSupportZoom(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.w("TEST", url);
// The app does some other things here, but are unrelated to que question
return true;
}
});
webView.setWebChromeClient(new MyChromeClient());
webView.loadDataWithBaseURL(Const.WEB_VIEW_BASE_URL, injectHtmlAndCss(guide.getContent()), "text/html; charset=UTF-8", null, null);
}
这里有一个例子说明了其他人的遭遇:
我对此一无所知。
最佳答案
结果发现loadDataWithBaseUrl方法在Android4.1/4.2中不起作用。
我真的需要更改基本url,因为在我的html代码中,许多资产都被相对路由引用,所以我在<head>
标记a<base>
中注入了html。例子:
<html>
<head>
<base href="http://www.example.com/">
</head>
<body>
<!-- YOUR BODY GOES HERE -->
</body>
</html>
我用loaddata加载了html:
webView.loadData(injectHtmlAndCss(guide.getContent()), "text/html; charset=UTF-8", "UTF-8");
它就像一个符咒。啊。