寫在前面:
記錄開發過程中遇到的問題
1.H5 頁面加載到一半加載不出來
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
/result.confirm();
return true;
}
分析:
0 onProgressChanged 中有進度,但是不會繼續增加,沒有報錯Log
1 剛開始懷疑是H5 中Js存在死循環,導致頁面卡住 (排除前端代碼)
2 onJsAlert 給出了Toast 提示,但是沒有消費
原因:上述代碼,用Android View的思維,return true, 表示已經處理了
但JsResult 沒有能拿到值,js就會pending
需要增加 result.confirm, 表示alert 已經處理
此外:JsResult 的cancel 和 confirm 對於alert沒有區別
而是用於 onJsConfirm 中的,對應 window.confirm() 的確定與取消
JsResult 的子類JsPromptResult 對應JS中的 window.prompt 提示框
2.H5 加載沒有在onPageFinished中返回
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
分析:
0 onPageFinished 和內核調用機制有關, 使用WebChromeClient 的onProgressChanged == 100
判斷加載完成更加準確