WebView網頁加載适配
目前Android項目中使用WebView加載網頁的情況很多,常見的就是 加載伺服器上的網頁 和 加載本地的網頁兩種;
1、加載伺服器上的網頁
mWebView.loadUrl("http://www.baidu.com");
2、加載本地的html的兩種方式(assets 與 raw)
本地的html檔案一般放置在assets目錄 或者 res–>raw目錄下,而兩種放置方式,使用webView加載的位址也是不一樣的
**1)**當html檔案放在assets目錄下時 (test為子目錄,en為國家語言辨別,demo.html為目标檔案)
mWebView.loadUrl("file:///android_asset/test/en/demo.html");
**2)**當html放置在res–>raw目錄下時
mWebView.loadUrl("file:///android_res/raw/demo.html");
放置assets目錄下和raw目錄下的差別:
1> assets目錄下可以建立子目錄,raw目錄下不可以有子目錄,隻能将檔案放在根目錄下,如raw/demo.html ;
2> 系統加載方式不同,如果适配國家語言(如 zh-中文 en-英文 )的話,assets目錄下的檔案會分别建立兩個zh和en的目錄,再去根據系統語言加載對應的位址,例如:
if(中文){
mWebView.loadUrl("file:///android_asset/test/zh/demo.html");
} else if (英文){
mWebView.loadUrl("file:///android_asset/test/en/demo.html");
}else{
mWebView.loadUrl("file:///android_asset/test/en/demo.html");
}
而raw則友善很多,隻需要建立多個目錄即可,例如:
raw-zh raw-en
mWebView.loadUrl("file:///android_res/raw/demo.html");
當系統語言為英文時,webview會自動加載raw-en裡邊的html,中文也是如此;
3、使用WebView加載網頁時遇到的問題
問題1:加載本地html網頁時,檔案放在raw時,網頁加載出來格式顯示錯誤,但是html放在assets目錄下可顯示正常
原因分析:大部分原因是由于html不規範,導緻html網頁加載之後無法正常顯示
解決方案:檢查格式顯示不對的html,外部标簽是否為 内容 ,如果不是,加入此外部标簽(或使用标準html網頁文檔)即可;
問題2:Android 9.0加載網頁失敗,出現提示net::ERR_CLEARTEXT_NOT_PERMITTED
原因分析:android9.0 預設情況下禁用明文支援。是以http的url均無法在webview中加載;
解決方案:
第一步:書寫network_security_config.xml 放入res–>xml目錄下
第一種情況:隻信任指定域名下的網址連結,如 域名1 和域名2
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">域名1</domain>
<domain includeSubdomains="true">域名2</domain>
</domain-config>
</network-security-config>
第二種情況:信任所有的網址連結
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
</network-security-config>
注意:如果使用Charles 抓包,需要單獨配置,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
第二步:AndroidManifest --> Application 标簽中加入:
android:networkSecurityConfig="@xml/network_security_config"
此時,Android9.0的手機上就可以正常顯示要加載的http網址了;