Android中的網頁加載適配

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網址了;

發佈了22 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章