詳解android 用webview加載網(wǎng)頁(https和http)
1.Android 加載https請(qǐng)求的網(wǎng)頁的時(shí)候 打不開
當(dāng)load有ssl層的https頁面時(shí),如果這個(gè)網(wǎng)站的安全證書在Android無法得到認(rèn)證,WebView就會(huì)變成一個(gè)空白頁,而并不會(huì)像PC瀏覽器中那樣跳出一個(gè)風(fēng)險(xiǎn)提示框。因此,我們必須針對(duì)這種情況進(jìn)行處理。(這個(gè)證書限于2.1版本以上的Android 系統(tǒng)才可以)
wv.setWebViewClient(new WebViewClient(){ @override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ //handler.cancel(); 默認(rèn)的處理方式,WebView變成空白頁 handler.process();接受證書 //handleMessage(Message msg); 其他處理 } // 這行代碼一定加上否則效果不會(huì)出現(xiàn) webView.getSettings().setJavaScriptEnabled(true);
查看Android瀏覽器源碼在TabControl.Java類中SubWindowClient方法中找,如果只是簡單的接受所有證書的話,就直接調(diào)process()方法就行了
寫到這里之后,直接運(yùn)行是頁面是可以打開的。但是打好簽名包之后,依舊打不開?。?!
一路追蹤之后,發(fā)現(xiàn)是那個(gè)方法被混淆了
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
還有一點(diǎn)要提到的是,如果手機(jī)添加了代理。也是打不開的
但是sslerror是從2.2才開始提供的。之前的版本怎么辦?
可以把a(bǔ)ndroid2.2中onReceivedSslError()的源碼導(dǎo)入到自己的工程中,具體方法如下:
先把a(bǔ)ndroid2.2包中的SslError.java和WebViewClient.java導(dǎo)入到自己的工程中,在導(dǎo)入時(shí)需要建立和android2.2源碼包中一樣的包名。然后在用webview的時(shí)候?qū)О蛯?dǎo)自己工程里的這個(gè)包名就行!
注意一下 webView 要設(shè)置的幾個(gè)地方興許能幫上忙:
1 . 默認(rèn)情況下,不能訪問 https,需要重寫 WebViewClient 的 onReceivedSslError
ps: API Level > 2.1,或者提供 SslError.java 和 WebViewClient.java 文件
重寫部分一般可以不做特殊處理,直接 handler.process(); 接受證書即可
2 . 默認(rèn)情況下,不能彈 js 框,需要重寫 WebChromeClient 的 onJsAlert
重寫部分也不需要特殊處理,直接返回 super.onJsAlert(view, url, message, result);
pps: 要 setWebViewClient 和 setWebChromeClient,webView 才能生效
2.Android 用webview加載網(wǎng)頁 可能會(huì)出現(xiàn)另外一種情況:
webview加載的網(wǎng)頁是http請(qǐng)求的 ,如果網(wǎng)頁里有一張圖片,并且該圖片的地址是https請(qǐng)求的,這時(shí)候用webview加載網(wǎng)頁,圖片是不顯示的。
會(huì)報(bào)這種錯(cuò)
Mixed Content as loaded over HTTPS, but requested an insecure image
意思是 http請(qǐng)求和https請(qǐng)求混淆了
注意: 用webview加載網(wǎng)頁,一定用同一種請(qǐng)求
android 5.0 webview不能加載http與https混合內(nèi)容的問題
在Android Lollipop上webview默認(rèn)不允許加載http與https混合內(nèi)容,比如你訪問的網(wǎng)頁為http://xxx.com/a.html,則如果a.html包含了https的res,則此res不會(huì)顯示。如果仔細(xì)觀察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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android WebView打開網(wǎng)頁一片空白的解決方法
- Android開發(fā)筆記之如何正確獲取WebView的網(wǎng)頁Title
- Android WebView實(shí)現(xiàn)網(wǎng)頁滾動(dòng)截圖
- Android開發(fā)中使用WebView控件瀏覽網(wǎng)頁的方法詳解
- Android編程實(shí)現(xiàn)webview將網(wǎng)頁打包成apk的方法
- Android中替換WebView加載網(wǎng)頁失敗時(shí)的頁面
- Android中Webview打開網(wǎng)頁的同時(shí)發(fā)送HTTP頭信息方法
- Android webView如何輸出自定義網(wǎng)頁
相關(guān)文章
Android中手機(jī)震動(dòng)的設(shè)置(Vibrator)的步驟簡要說明
Android中手機(jī)震動(dòng)的設(shè)置(Vibrator)的步驟,很詳細(xì),感興趣的朋友可以了解下哦2013-01-01android實(shí)現(xiàn)Splash閃屏效果示例
這篇文章主要介紹了android實(shí)現(xiàn)Splash閃屏效果的方法,涉及Android中postDelayed方法及AndroidManifest.xml權(quán)限控制的相關(guān)使用技巧,需要的朋友可以參考下2016-08-08Android使用Walle實(shí)現(xiàn)多渠道打包功能的實(shí)現(xiàn)示例
這篇文章主要介紹了Android使用Walle實(shí)現(xiàn)多渠道打包功能的實(shí)現(xiàn)示例,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-04-04Android 中使用 AsyncTask 異步讀取網(wǎng)絡(luò)圖片
這篇文章主要介紹了Android 中使用 AsyncTask 異步讀取網(wǎng)絡(luò)圖片的相關(guān)資料,需要的朋友可以參考下2016-02-02Android開發(fā)TextvView實(shí)現(xiàn)鏤空字體效果示例代碼
這篇文章主要介紹了Android開發(fā)TextvView實(shí)現(xiàn)鏤空字體效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android 自定義TextView去除paddingTop和paddingBottom
這篇文章主要介紹了Android 自定義TextView去除paddingTop和paddingBottom的相關(guān)資料,這里提供實(shí)例來幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09使用Android Studio實(shí)現(xiàn)為系統(tǒng)級(jí)的app簽名
這篇文章主要介紹了使用Android Studio實(shí)現(xiàn)為系統(tǒng)級(jí)的app簽名,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android自定義viewgroup快速滑動(dòng)(4)
這篇文章主要為大家詳細(xì)介紹了Android自定義viewgroup快速滑動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12