写在前面:
记录开发过程中遇到的问题
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
判断加载完成更加准确