之前項目中遇到一個問題,項目中webView加載h5廣告,在h5中提交數據時,竟然一直顯示loading而不加載提交成功界面,在此記錄一下解決之法,分享給遇到同樣問題的伙伴們。
運維人員提交這個問題后,第一時間考慮的是,測試原始鏈接在手機瀏覽器加載中是否正常?ios是否可以?
然而,經過簡單的運行測試,只有android端會出現此類問題(現象),怎么辦呢?Debug看!
首先檢查一下代碼,有沒有設置支持js 等等設置。。。
webView.getSettings().setJavaScriptEnabled(true);
在看不出代碼有什么紕漏的情況下,使用 Android studio自帶的工具logcat打印日志看看信息,捕獲到一條log:
chromium: [INFO:CONSOLE(1)] "[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'getItem' of null"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (found in)", source: 要加載的h5鏈接 (1)
然后打開上面報的source:后面的url? 搜索一下getItem看看是什么鬼?沒搜到,那就帶著問題上網搜,記錄下我看到解答。
google搜索:h5中"getItem() of null" 然后回車鍵搜索。。。
找到問題:h5本地數據持久化存儲的問題。
解釋原因:
DOM storage 是HTML5提供的一種標準接口,主要將鍵值對存儲在本地,在頁面加載完畢后可以通過JavaScript來操作這些數據,但是Android 默認是關閉這個功能的,則導致H5頁面加載失敗。
解決方法:通過WebSetting設置開啟(DOM Storage功能)
webView.getSettings().setDomStorageEnabled(true);
還有一種情況加載也是空白頁面順便也記錄一下:
如商品詳情頁,h5鏈接https而內容圖片為http時,5.0以上系統也會遇到加載不出來的情況,解決之法:
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
設置好了運行,測試OK? ? 覺得有幫助到你,隨手點個贊~