轉-WebView loadData與loadDataWithBaseURL用法、區別

近期用到WebView加載一些動態的內容的時候遇到一些問題,例如:在加載動態網頁時,頁面有不少樣式表包含一些特殊字符,致使WebView沒法識別產生加載異常,程序直接崩潰;另一個就是加載的網頁中有圖片資源,WebView不識別相對路徑,致使圖片沒法加載。 
 
    蒐羅了一下網上資料,總結一下,以便後用。 
LoadData和loadDataWithBaseURL 的用法; 
 
      loadData: 
public void loadData (String data, String mimeType, String encoding) 
Load the given data into the WebView. This will load the data into WebView using the data: scheme. Content loaded through this mechanism does not have the ability to load content from the network. 
Parameters 
data mimeType encoding 
A String of data in the given encoding. The date must be URI-escaped -- '#', '%', '\', '?' should be replaced by %23, %25, %27, %3f respectively. 
The MIMEType of the data. i.e. text/html, image/jpeg 
The encoding of the data. i.e. utf-8, base64 
 
下如API中所說的, 
 
      data:是要加載的數據類型,但在數據裏面不能出現英文字符:'#', '%', '\' , '?' 這四個字符,若是有的話能夠用 %23, %25, %27, %3f,這些字符來替換,在平時測試時,你的數據時,你的數據裏含有這些字符,但不會出問題,當出問題時,你能夠替換下。 
       %,會報找不到頁面錯誤,頁面全是亂碼。亂碼樣式見符件。 
       #,會讓你的goBack失效,但canGoBAck是可使用的。因而就會產生返回按鈕生效,但不能返回的狀況。 
 
       \ 和? 我在轉換時,會報錯,由於它會把\看成轉義符來使用,若是用兩級轉義,也不生效,我是對它無語了。 
 
咱們在使用loadData時,就意味着須要把全部的非法字符所有轉換掉,這樣就會給運行速度帶來很大的影響,由於在使用時,在頁面stytle中會使用不少%號。頁面的數據越多,運行的速度就會越慢。 
 
      data中,有人會遇到中文亂碼問題,解決辦法:參數傳"utf-8",頁面的編碼格式也必須是utf-8,這樣編碼統一就不會亂了。別的編碼我也沒有試過。 
 
public 
 
void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl) 
 
Load the given data into the WebView, use the provided URL as the base URL for the content. The base URL is the URL that represents the page that is loaded through this interface. As such, it is used to resolve any relative URLs. The historyUrl is used for the history entry. 
 
Note for post 1.0. Due to the change in the WebKit, the access to asset files through "file:///android_asset/" for the sub resources is more restricted. If you provide null or empty string as baseUrl, you won't be able to access asset files. If the baseUrl is anything other than http(s)/ftp(s)/about/javascript as scheme, you can access asset files for sub resources. 
Parameters 
baseUrl data mimeType encoding historyUrl 
Url to resolve relative paths with, if null defaults to "about:blank" 
A String of data in the given encoding. 
The MIMEType of the data. i.e. text/html. If null, defaults to "text/html" 
The encoding of the data. i.e. utf-8, us-ascii 
URL to use as the history entry. Can be null. 
 
在使用loadDataWithBaseURL時,須要注意的就是 baseUr:雖然API上寫的是要傳一個Url,但我在用時,發現傳一個Url並不能夠,我發現這個就是一個標誌位,用來標誌當前頁面的Key值的,而historyUrl就是一個value值,在加載時,它會把baseUrl和historyUrl傳到List列表中,看成歷史記錄來使用,當前進和後退時,它會經過baseUrl來尋找historyUrl的路徑來加載historyUrl路徑來加載歷史界面,須要注意的就是history所指向的必須是一個頁面,而且頁面存在於SD卡中或程序中(assets),loadDataWithBaseURL,它自己並不會向歷史記錄中存儲數據,要想實現歷史記錄,須要咱們本身來實現,也許是個人技術有限,我有了比較笨的訪求來實現:就是在加載頁面時,我把數據另外的寫到一個html頁面中,並把它保存到SD中,當點擊返回時,它會經過historyUrl指向的路徑來加載頁面,這樣就解決了歷史記錄問題。 
 
前者加載靜態網頁沒有問題,加載遠程(WIFI)頁面時有些注意,圖片加載會出現問題,通常狀況下Web頁面中給出的是圖片相對路徑,並無給完整的HTPP路徑,這點很重要,須要自行處理一下,否則圖片沒法正常加載。
相關文章
相關標籤/搜索