日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android webview加載https鏈接錯(cuò)誤或無(wú)響應(yīng)的解決

瀏覽:214日期:2022-09-25 14:42:02

最近做無(wú)線WiFi的時(shí)候,在最后認(rèn)證成功的時(shí)候會(huì)彈出一個(gè)廣告頁(yè),于是用webview去加載了一下,結(jié)果沒(méi)反應(yīng),打印url出來(lái)看了一下,發(fā)現(xiàn)是https格式的,在使用WebView加載https資源文件時(shí),如果認(rèn)證證書(shū)不被Android認(rèn)可,那么會(huì)出現(xiàn)無(wú)法成功加載對(duì)應(yīng)資源問(wèn)題。那么,我們就要針對(duì)這一狀況作出對(duì)應(yīng)的處理。

于是百度了一下,這里記錄一下,給大家做個(gè)參考:

1、設(shè)置WebView接受所有網(wǎng)站的證書(shū)

在認(rèn)證證書(shū)不被Android所接受的情況下,我們可以通過(guò)設(shè)置重寫(xiě)WebViewClient的onReceivedSslError方法在其中設(shè)置接受所有網(wǎng)站的證書(shū)來(lái)解決,重寫(xiě)WebView的onReceivedSslError方法,添加handler.proceed方法,但App如果上架GooglePlay會(huì)被警告的。所以建議使用以下的第二個(gè)方法。

具體代碼如下:

webView.setWebViewClient(new WebViewClient(){@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){handler.proceed();}});

注:在重寫(xiě)WebViewClient的onReceivedSslError方法時(shí),注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否則設(shè)置無(wú)效。

2、啟用mixed content

Android webView 從 Lollipop 開(kāi)始默認(rèn)不開(kāi)MixedContentMode,因此,我們開(kāi)啟即可滿足我們大多數(shù)需求。

webView.setWebViewClient(new WebViewClient(){@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}});

在Android5.0中,WebView方面做了些修改,如果你的系統(tǒng)target api為21以上:

系統(tǒng)默認(rèn)禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。

系統(tǒng)現(xiàn)在可以智能選擇HTML文檔的portion來(lái)繪制。這種新特性可以減少內(nèi)存footprint并改進(jìn)性能。若要一次性渲染整個(gè)HTML文檔,可以調(diào)用這個(gè)方法enableSlowWholeDocumentDraw(),如果你的app的target api低于21:系統(tǒng)允許mixed content和第三方cookie,并且總是一次性渲染整個(gè)HTML文檔。

在使用WebView的類中添加如下代碼:

// android 5.0以上默認(rèn)不支持Mixed Contentif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);}

結(jié)果:

我的問(wèn)題并不是出現(xiàn)在這些地方,而是出現(xiàn)了在加載Url時(shí),部分Url使用的事http而不是https,導(dǎo)致無(wú)法加載,功能實(shí)現(xiàn)不了。那么要求后臺(tái)開(kāi)發(fā)人員把http改成https。就這樣,成功了。或者還可以使用一些第三方庫(kù)來(lái)加載也行。

測(cè)試:

1、調(diào)用高德地圖沒(méi)法顯示,前端工程師用了http……那么改為https

2、部分功能沒(méi)實(shí)現(xiàn),因?yàn)楹笈_(tái)的沒(méi)有加證書(shū)…..那么,全部改回http

補(bǔ)充知識(shí):Android WebView加載網(wǎng)頁(yè)鏈接遇到的那些坑

本來(lái)覺(jué)得十分簡(jiǎn)單的問(wèn)題,結(jié)果遇到了不少坑,到現(xiàn)在都不敢保證不出問(wèn)題,只是解決了大部分問(wèn)題。。。

下面是列出幾個(gè)問(wèn)題

在webview中跳轉(zhuǎn)別的頁(yè)面無(wú)響應(yīng)

在webview中下載文件無(wú)響應(yīng)

部分網(wǎng)址鏈接無(wú)法顯示

部分網(wǎng)址打開(kāi)自動(dòng)跳轉(zhuǎn)到瀏覽器

1.在webview中跳轉(zhuǎn)別的頁(yè)面無(wú)響應(yīng)

修改之前代碼如下:

WebSettings webSettings = webView.getSettings(); //設(shè)置WebView屬性,能夠執(zhí)行Javascript腳本 webSettings.setJavaScriptEnabled(true); //設(shè)置可以訪問(wèn)文件 webSettings.setAllowFileAccess(true); //設(shè)置支持縮放 webSettings.setBuiltInZoomControls(true); webView.loadUrl(link); webView.setWebViewClient(new webViewClient ());

修改之后加了不少webview的設(shè)置包括:

webSettings.setAppCacheEnabled(true);webSettings.setDomStorageEnabled(true);webSettings.supportMultipleWindows();webSettings.setAllowContentAccess(true);webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);webSettings.setUseWideViewPort(true);webSettings.setLoadWithOverviewMode(true);webSettings.setSavePassword(true);webSettings.setSaveFormData(true);webSettings.setJavaScriptCanOpenWindowsAutomatically(true);webSettings.setLoadsImagesAutomatically(true);webView.setWebChromeClient(new WebChromeClient());//這行最好不要丟掉

當(dāng)然,這些屬性可能有些不是必須要添加的,為了盡量滿足多種需求,所以我都添加了。

修改完成后就可以在webview中跳轉(zhuǎn)別的url鏈接了,就算是解決了第一個(gè)問(wèn)題吧。

2.在webview中下載文件無(wú)響應(yīng)

因?yàn)楸旧韜ebview不具備下載功能,所以需要讓系統(tǒng)處理或者自定義下載。

webview給我們提供了一個(gè)下載監(jiān)聽(tīng)接口,下面我們來(lái)實(shí)現(xiàn)下載處理:

class MyDownLoad implements DownloadListener { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { if (url.endsWith('.apk')) { /** * 通過(guò)系統(tǒng)下載apk */ Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } } }

然后再設(shè)置中添加:

webView.setDownloadListener(new MyDownLoad());

這里是將下載功能交給系統(tǒng)來(lái)處理了,并沒(méi)有特殊需求所以就不自定義了。

3.部分網(wǎng)址鏈接無(wú)法顯示,報(bào)錯(cuò)net::err_unknown_url_scheme

由于我們有時(shí)候自定義了WebViewClient,內(nèi)容大致如下:

private class webViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadurl(url)//返回true代表在當(dāng)前webview中打開(kāi),返回false表示打開(kāi)瀏覽器 return super.shouldOverrideUrlLoading(view,url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { if(!dialog.isShowing()) { dialog.show(); } super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { if(dialog.isShowing()){ dialog.dismiss(); } super.onPageFinished(view, url); } }

注意shouldOverrideUrlLoading方法,平時(shí)我們可能會(huì)在其中設(shè)置view.loadurl(url),正是這句代碼導(dǎo)致部分網(wǎng)頁(yè)打不開(kāi),這可能是webview的本身加載網(wǎng)頁(yè)有限制吧。所以我把這句去掉了,在返回時(shí)返回了true(true表示在當(dāng)前webview中打開(kāi)網(wǎng)頁(yè),false則更傾向于瀏覽器打開(kāi)網(wǎng)頁(yè))。這樣做,發(fā)現(xiàn)部分網(wǎng)頁(yè)仍然打不開(kāi)。于是直接刪掉了webView.setWebViewClient(new webViewClient ()),而webView.setWebChromeClient(new WebChromeClient())不能刪,結(jié)果網(wǎng)頁(yè)是打開(kāi)了,但有的則自動(dòng)跳轉(zhuǎn)到瀏覽器打開(kāi)的。但我們的需求是不要打開(kāi)瀏覽器。。。

4.部分網(wǎng)址打開(kāi)自動(dòng)跳轉(zhuǎn)到瀏覽器

接到上面所講,打開(kāi)部分網(wǎng)址跳轉(zhuǎn)到瀏覽器了,如何不讓他跳轉(zhuǎn)呢,返回true可以禁止跳轉(zhuǎn),但部分網(wǎng)址在webview中無(wú)法打開(kāi),接下來(lái),不給它直接返回true或false了,而是返回super,讓它父類處理,結(jié)果也并沒(méi)有調(diào)到瀏覽器并且網(wǎng)頁(yè)也打開(kāi)了,現(xiàn)在暫時(shí)就這樣結(jié)尾了做到了大部分網(wǎng)址的兼容。

總結(jié):本人對(duì)webview了解也是有限,所以并不深入只是解決部分問(wèn)題,可能理解也有偏差,如有問(wèn)題請(qǐng)見(jiàn)諒。希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久婷婷亚洲| av免费不卡国产观看| 亚洲激情久久| 青青久久av| 香蕉国产精品| 美女久久一区| 99视频精品| 亚洲天堂日韩在线| 日韩一区二区三免费高清在线观看| 蜜臀av在线播放一区二区三区| 蜜桃视频一区二区三区在线观看| 久久福利毛片| 日本va欧美va瓶| 国产精品白丝av嫩草影院| 精品视频自拍| 欧美手机在线| 亚洲日本免费电影| 久久爱www.| 日韩欧美一区免费| 红桃视频亚洲| 欧美日韩18| 国产精品亚洲片在线播放| 国产一区二区色噜噜| 99视频精品全部免费在线视频| 国产亚洲毛片| 国产私拍福利精品视频二区| 成人午夜亚洲| 国产亚洲福利| 欧美自拍一区| 日韩在线中文| 亚洲一区二区av| 国产精品地址| 日韩一区二区三区免费| 欧美专区在线| 美女av一区| 国产精品三上| 久久国产日韩欧美精品| 中文字幕在线视频网站| 另类国产ts人妖高潮视频| 国产精品亚洲欧美| 久久久国产精品一区二区中文| 亚洲一区二区三区高清| 国产日本久久| 国产成人精品亚洲日本在线观看| 日本大胆欧美人术艺术动态| 国产精品久一| 日韩午夜av| 国产极品一区| 亚洲成人免费| 欧美国产日韩电影| re久久精品视频| 国产私拍福利精品视频二区| 久久久久国产精品一区二区| 日韩不卡一区二区三区| 久久国产毛片| 麻豆国产欧美日韩综合精品二区| 精品一区毛片| 美腿丝袜在线亚洲一区| 最新日韩欧美| 日本一区二区高清不卡| 亚洲日本在线观看视频| 九九精品调教| 国产精品v亚洲精品v日韩精品| 亚洲男女av一区二区| 免费在线亚洲| 亚洲影视一区| 日本精品不卡| 国产精品nxnn| 只有精品亚洲| 久久精品国产www456c0m| 国产精品一区二区99| 亚洲综合欧美| 久久久一本精品| 欧美国产中文高清| 色婷婷成人网| 99免费精品| 成人国产精品久久| 97久久中文字幕| 视频一区国产视频| 99tv成人| 国产一区精品福利| 日欧美一区二区| 日韩视频不卡| 99热国内精品| 日韩免费福利视频| 国产成人免费视频网站视频社区| 欧美日韩一区二区三区四区在线观看| 九一国产精品| | 欧美精品黄色| 97se综合| 精品国产一区二区三区噜噜噜| 日韩欧美美女在线观看| 亚洲激情av| 91精品蜜臀一区二区三区在线| 精品国产美女a久久9999| 91综合久久爱com| 亚洲日本国产| 蜜桃av一区二区三区电影| 欧美日韩在线网站| 91精品韩国| 日韩一区电影| 国产精品麻豆久久| 精品九九在线| 精品一区二区三区中文字幕在线| 国产精品探花在线观看| 久久国产婷婷国产香蕉| 日韩欧美中文字幕一区二区三区| 亚洲欧美日韩专区| 国内精品福利| 激情偷拍久久| 久久精品国产www456c0m| 日本免费一区二区三区四区| 成人台湾亚洲精品一区二区 | 日本不卡一二三区黄网| 亚洲精品麻豆| 亚洲精品乱码| 日本国产亚洲| 国产一区 二区| 国产精品综合色区在线观看| 欧美在线观看天堂一区二区三区| 婷婷成人av| 国产欧美综合一区二区三区| 亚洲精一区二区三区| 午夜精品影视国产一区在线麻豆| 日韩在线观看一区二区三区| 青青草精品视频| 国产精品久久久久久妇女| 麻豆久久一区二区| 国产成人精品一区二区三区免费| 国产成年精品| 99国产精品免费视频观看| 美女久久久久| 国产亚洲欧洲| 日本91福利区| 精品国产亚洲一区二区三区大结局| 加勒比视频一区| 日韩精品看片| 欧美日韩国产一区二区三区不卡| 国产精品嫩草99av在线| 日本亚洲视频在线| 国产视频一区二| 福利片在线一区二区| 日韩欧美一区二区三区在线观看 | 久久天堂av| 国产精品日韩| 久久国产精品免费一区二区三区| 精品三级国产| 青青久久av| 男人天堂欧美日韩| 91精品日本| 国产美女高潮在线| 国产亚洲在线| 国产亚洲精品美女久久 | 亚洲一区区二区| 国产区精品区| 成人羞羞在线观看网站| 国产精品普通话对白| 欧美日韩一区二区国产| 精品亚洲精品| 婷婷六月综合| 欧美日韩中出| 肉色欧美久久久久久久免费看| 亚洲欧美久久久| 久久久久伊人| 日韩视频在线一区二区三区| 日韩欧美四区| 国产在线看片免费视频在线观看| 国产真实久久| 国产欧美丝祙| 久久久久久久久丰满| 日本一区二区三区中文字幕| 电影91久久久| 蜜臀久久久99精品久久久久久| 国产免费av一区二区三区| 久久久久午夜电影| 日韩国产欧美在线播放| 91看片一区| 日韩黄色av| 激情欧美一区| 国产精品欧美三级在线观看| 国产一区日韩一区| 国产精品美女午夜爽爽| 欧美va天堂| 麻豆精品在线观看| 亚洲免费观看| 国产一区二区精品久| 中文字幕日韩欧美精品高清在线| 国产中文欧美日韩在线| 国产精品呻吟| 美女久久久久久| 亚洲自啪免费| 久久毛片亚洲| 日韩成人午夜精品| 91成人精品| 国产成人精品福利| 国产精品99一区二区三| 日本在线视频一区二区| 午夜久久免费观看| 91青青国产在线观看精品|