- 點擊跳轉(zhuǎn)=>Unity3D特效百例
- 點擊跳轉(zhuǎn)=>案例項目實戰(zhàn)源碼
- 點擊跳轉(zhuǎn)=>游戲腳本-輔助自動化
- 點擊跳轉(zhuǎn)=>Android控件全解手冊
- 點擊跳轉(zhuǎn)=>Scratch編程案例
- 點擊跳轉(zhuǎn)=>軟考全系列
??關(guān)于作者
眾所周知,人生是一個漫長的流程,不斷克服困難,不斷反思前進(jìn)的過程。在這個過程中會產(chǎn)生很多對于人生的質(zhì)疑和思考,于是我決定將自己的思考,經(jīng)驗和故事全部分享出來,以此尋找共鳴 ?。?!
專注于Android/Unity和各種游戲開發(fā)技巧,以及各種資源分享(網(wǎng)站、工具、素材、源碼、游戲等)
有什么需要歡迎私我,交流群讓學(xué)習(xí)不再孤單。
??實踐過程
??情況一
比如我第一個要說的就是你項目如果集成了AutoSize的話,并且使用了副單位,會有一定概率webview里面適配失效,注意失效后會因為單位特別大等原因看起來是白屏(其實是超出了可視范圍導(dǎo)致看不見了而已),你還需要適配下即可。繼承下webview,復(fù)寫setOverScrollMode方法,里面設(shè)置AutoSize即可。我在這一塊吃了很大的一個虧。氣死了。
class YourWebView : WebView {
constructor(context: Context) : super(context) {
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
}
override fun setOverScrollMode(mode: Int) {
super.setOverScrollMode(mode)
AutoSize.autoConvertDensityOfGlobal(context as Activity)
}
}
??情況二
其實只要你百度基本都能發(fā)現(xiàn),最多的就是setDomStorageEnabled屬性設(shè)置為true來解決。
其實確實是這樣。但是我們要有一個概念,白屏不一定是webview的原因,還有可能是其他的原因,比如上面的AutoSize。
HTML5 的 DOM Storage 機(jī)制提供了一種方式讓程序員能夠把信息存儲到本地的計算機(jī)上,在需要時獲取。這點和 cookie 相似,區(qū)別是 DOM Storage 提供了更大容量的存儲空間。
localStorage 對象和 sessionStorage 對象使用方法基本相同,它們的區(qū)別在于作用的范圍不同。sessionStorage 用來存儲與頁面相關(guān)的數(shù)據(jù),它在頁面關(guān)閉后無法使用。而 localStorage 則持久存在,在頁面關(guān)閉后也可以使用。
??情況三
本身html就有bug,別不信,遇到好幾次了。前端同事在他那跑起來沒問題,可隨時Android運行就是不行,后來一點發(fā)現(xiàn)直接在瀏覽器運行就有問題。前端同事很有可能在開發(fā)環(huán)境下沒事,發(fā)布出來就有毛病了,或者是從大模塊里摘出來的小模塊,大模塊下運行著沒事,小模塊摘出來沒弄好導(dǎo)致問題。
??情況四
合理適時的清理webview的緩存,以及webview頁面關(guān)閉硬件加速。平時工作中和前端交流也是,他們說的最多的就是緩存問題,web遇見bug或問題,說瀏覽器或緩存的問題,刷新下就好了。挺魔幻的。
// 清緩存和記錄,緩存引起的白屏
mWebView.clearCache(true);
mWebView.clearHistory();
//... 有很多clear的方法
??情況五
https的問題,當(dāng)load通過SSL加密的HTTPS頁面時,如果這個頁面的安全證書無法得到認(rèn)證,WebView就會顯示成空白頁。比如出現(xiàn)Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https。
這個是開啟相關(guān)設(shè)置即可。
通過重寫WebViewClient的onReceivedSslError方法來接受所有網(wǎng)站的證書,忽略SSL錯誤。
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
super.onReceivedSslError(view, handler, error);
}
webSetting.setAllowUniversalAccessFromFileURLs(true);
??情況六
在Android 5.0之后,WebView默認(rèn)不允許Https + Http的混合使用方式,所以當(dāng)Url是Https的,圖片資源是Http時,導(dǎo)致頁面加載失敗。需要設(shè)置 MixedContentMode屬性允許Https+Http混用。
WebSettings wetSettings = webView.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
wetSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
??情況七
多android版本兼容問題,在Android7.0+,打開二級頁面跳轉(zhuǎn)的時候,會出現(xiàn)空白?。≡蚴遣煌姹镜南到y(tǒng)WebViewClient的回調(diào)里shouldOverrideUrlLoading方法的loadurl不一定是地址,也有可能是對象。
WebViewClient client = new WebViewClient() {
//防止加載網(wǎng)頁時調(diào)起系統(tǒng)瀏覽器
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.loadUrl(request.getUrl().toString());
} else {
view.loadUrl(request.toString());
}
return true;
}
//.......
};
??情況八
如果上面都不行,一般就是自己做更深的檢測了。思路是:
- 截取當(dāng)前屏幕的內(nèi)容,獲得Bitmap
- 判斷Bitmap是否為白色圖片
- 針對白屏做相應(yīng)的處理
可參考:https://juejin.cn/post/6972901939197509669
??情況九
事實證明高級語言,什么框架啊,前沿技術(shù)啊,都有很多的坑,兼容問題,他們的表現(xiàn)在某方面可能好但并不是全部適用。如果你是領(lǐng)導(dǎo),且是以出產(chǎn)品為目的,挺推薦約束同事就用原生的開發(fā),漸漸的累積起來后續(xù)開發(fā)會越來越快。
??其他
??作者:小空和小芝中的小空
??轉(zhuǎn)載說明-務(wù)必注明來源:https://zhima.blog.csdn.net/
??這位道友請留步??,我觀你氣度不凡,談吐間隱隱有王者霸氣??,日后定有一番大作為???。?!旁邊有點贊??收藏??今日傳你,點了吧,未來你成功??,我分文不取,若不成功??,也好回來找我。文章來源:http://www.zghlxwxcb.cn/news/detail-735435.html
溫馨提示:點擊下方卡片獲取更多意想不到的資源。文章來源地址http://www.zghlxwxcb.cn/news/detail-735435.html
到了這里,關(guān)于Android問題筆記十四:解決WebView白屏空白的九種方案,AutoSize?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!