欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解android 用webview加載網(wǎng)頁(https和http)

 更新時間:2017年11月20日 10:08:09   作者:碼農(nóng)的小世界  
這篇文章主要介紹了詳解android 用webview加載網(wǎng)頁(https和http),詳細的介紹了兩個錯誤的解決方法,有興趣的可以了解一下

1.Android 加載https請求的網(wǎng)頁的時候 打不開

當load有ssl層的https頁面時,如果這個網(wǎng)站的安全證書在Android無法得到認證,WebView就會變成一個空白頁,而并不會像PC瀏覽器中那樣跳出一個風險提示框。因此,我們必須針對這種情況進行處理。(這個證書限于2.1版本以上的Android 系統(tǒng)才可以)

wv.setWebViewClient(new WebViewClient(){

@override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){

//handler.cancel(); 默認的處理方式,WebView變成空白頁
 handler.process();接受證書

//handleMessage(Message msg); 其他處理
}

// 這行代碼一定加上否則效果不會出現(xiàn) 
 webView.getSettings().setJavaScriptEnabled(true); 

查看Android瀏覽器源碼在TabControl.Java類中SubWindowClient方法中找,如果只是簡單的接受所有證書的話,就直接調(diào)process()方法就行了

寫到這里之后,直接運行是頁面是可以打開的。但是打好簽名包之后,依舊打不開?。?!

一路追蹤之后,發(fā)現(xiàn)是那個方法被混淆了

proguard:mapping.txt
xx.xx.xxx
  xx.xx.xxx this$0 -> a
  void onReceivedSslError(android.webkit.WebView,android.webkit.SslErrorHandler,android.net.http.SslError) -> onReceivedSslError

所以還要必要在混淆文件proguard.cfg中,加入以下:

-keep public class android.net.http.SslError

-dontwarn android.webkit.WebView

-dontwarn android.net.http.SslError

-dontwarn Android.webkit.WebViewClient

還有一點要提到的是,如果手機添加了代理。也是打不開的

但是sslerror是從2.2才開始提供的。之前的版本怎么辦?

可以把android2.2中onReceivedSslError()的源碼導(dǎo)入到自己的工程中,具體方法如下:

先把android2.2包中的SslError.java和WebViewClient.java導(dǎo)入到自己的工程中,在導(dǎo)入時需要建立和android2.2源碼包中一樣的包名。然后在用webview的時候?qū)О蛯?dǎo)自己工程里的這個包名就行!

注意一下 webView 要設(shè)置的幾個地方興許能幫上忙:

1 . 默認情況下,不能訪問 https,需要重寫 WebViewClient 的 onReceivedSslError

ps: API Level > 2.1,或者提供 SslError.java 和 WebViewClient.java 文件

重寫部分一般可以不做特殊處理,直接 handler.process(); 接受證書即可

2 . 默認情況下,不能彈 js 框,需要重寫 WebChromeClient 的 onJsAlert
重寫部分也不需要特殊處理,直接返回 super.onJsAlert(view, url, message, result);

pps: 要 setWebViewClient 和 setWebChromeClient,webView 才能生效

2.Android 用webview加載網(wǎng)頁 可能會出現(xiàn)另外一種情況:

webview加載的網(wǎng)頁是http請求的 ,如果網(wǎng)頁里有一張圖片,并且該圖片的地址是https請求的,這時候用webview加載網(wǎng)頁,圖片是不顯示的。

會報這種錯 

Mixed Content as loaded over HTTPS, but requested an insecure image

意思是  http請求和https請求混淆了

注意: 用webview加載網(wǎng)頁,一定用同一種請求

android 5.0 webview不能加載http與https混合內(nèi)容的問題

在Android Lollipop上webview默認不允許加載http與https混合內(nèi)容,比如你訪問的網(wǎng)頁為http://xxx.com/a.html,則如果a.html包含了https的res,則此res不會顯示。如果仔細觀察log,可以看到如下的內(nèi)容提示:

。。。。。。was loaded over HTTPS, but requested an insecure image。。。。。。。。。。

So,該怎么解決呢?很簡單,只需設(shè)置webSettings,允許其加載混合網(wǎng)絡(luò)協(xié)議內(nèi)容即可。

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論