在项目里有时会需要监听WebView加载完成的状态,可能有人会使用WebViewClient里onPageFinished这个方法来监听,可是这个官方的方法到现在还是不稳定,有些能监听到,有些则不能。
本人做法是使用WebChromeClient里onProgressChanged这个方法来监听,相关代码如下:
public class WebViewUtil {
@SuppressLint("SetJavaScriptEnabled")
public static void loadUrl(final WebView webView, String url, final OnLoadFinishListener listener) {
if (TextUtils.isEmpty(url))
return;
// 启用javascript
webView.getSettings().setJavaScriptEnabled(true);
//用这个方法判断是否加载完成,不过会触发多次,就是会出现多次newProgress==100的情况
webView.setWebChromeClient(new WebChromeClient() {
private AtomicBoolean mIsLoadFinish = new AtomicBoolean(false);
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
if (!mIsLoadFinish.compareAndSet(false, true)) {
return;
}
if (listener != null) {
listener.onLoadFinish();
}
}
}
});
webView.loadUrl(url);
}
public interface OnLoadFinishListener {
void onLoadFinish();
}
}