通常我们使用WebView加载网页来显示数据,网页可以是来自网络,也可以来自本地文件。有时我们不需要WebView加载整个网页,只需要显示一些html片段。下面将讨论WebView加载数据的几种方式。
loadData(String data, String mimeType, String encoding)
将data:scheme 的URL给定的数据加载到WebView中。
注意,JavaScript的同源策略意味着在使用该方法加载的页面中运行的脚本将无法访问除了 “data” 以外的任何方案加载的内容,包括“HTTP(S)”。
为了避免这种限制,可以使用带有适当的基本URL的loadDataWithBaseURL();
< script > < img > < iframe> 中的src,href都可以任意链接网络资源,不受同源策略限制。 图片是可以加载的,只是路径存在问题,使用绝对路径图片就可以正常加载。(如果图片无法显示可能有两个原因导致:一是路径不正确;另一个是未添加网络权限。)
如:
webView.loadData(data,"text/html","UTF-8");
如上述出现乱码,可用如下方式:
webView.loadData(data,"text/html; charset=UTF-8",null);
出现乱码时,设置如下也不会有效,因为默认值就是 “UTF-8”:
webSettings.setDefaultTextEncodingName("UTF-8");
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
将给定的数据加载到WebView中,使用baseUrl作为内容的基本URL。baseUrl既用于解析相对URL,又用于应用JavaScript的同源策略。 historyUrl用于历史记录。
MimeType参数指定数据的格式。如果WebView无法处理指定的MIME类型,它将下载数据。如果NULL,默认为 ‘text/html’”
请注意,只有当BaseURL指定了一个“http”、“https”、“ftp”、“ftps”、“about” 或 “JavaScript” 以外的方案时,才能以这种方式指定的内容(通过 “file ”方案URL)访问本地设备文件。
如:
String data ="<img src=\"/timg?image&quality=80&size=b9999_10000&sec=1528536808600&di=7d442b1a441808cd92c57fa79e69ce53&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F017464599dfbf1a801201794c5efbb.jpg%40900w_1l_2o_100sh.jpg\" height=\"200\" width=\"300\">";
String baseUrl ="https://timgsa.baidu.com";
webView.loadDataWithBaseURL(baseUrl,data,"text/html; charset=UTF-8",null,null);
loadUrl (String url)
加载指定的url。
如:
webView.loadUrl("http://www.baidu.com");
只有上述代码会导致调用浏览器打开网页,若想在WebView中显示网页需添加如下代码:
webView.setWebViewClient(new WebViewClient());
加载本地html文件
index.html文件在/src/main/assets 目录下:
webView.loadUrl("file:///android_asset/index.html");