用webview加载网页,里面有js和ajax的交互,我要获取它们的数据,要怎么等他们加载完成
插入js来判断onload等,但是ajax没法直接知道,需要轮训判断
都纠结了几天了还没解决呢,
WebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
//newProgress是0到100之间,
}
});
用这个试下?
你拿不到js的数据是因为,你如果Webview不写网页判断是否加载完成的话,你的loadjs其实就是走在H5之前的,但是其实之前的话网页是没有加载外成的,所以你的js那个时候的方法其实是失效的。
楼上说的方法其实是可以的
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new GuestFragmentH5.JieWewViewClients());
mWebView.loadUrl(url+"?userid="+ SharedPreferencesUtil.getUserId(getActivity())+"&token="+SharedPreferencesUtil.getToken(getActivity()));
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if (newProgress == 100) {
// 网页加载完成
// progDialog.dismiss();
nonelayout.setVisibility(View.GONE);
mWebView.setVisibility(View.VISIBLE);
// mHandler.removeCallbacksAndMessages(mRunnable);
} else {
// 加载中
nonelayout.setVisibility(View.VISIBLE);
}
}
});
mWebView.addJavascriptInterface(new GuestFragmentH5.ButtonClicks(), "Android");
}
还有一个方法是这个
class JieWewViewClient extends WebViewClient {
/**
* 如果紧跟着
* webView.loadUrl(file:///android_asset/index.html);
* 调用Js中的方法是不起作用的,必须页面加载完成才可以
*/
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//webDetail.loadUrl("javascript:javaCallJs('" + jsonDetail + "','" + jsonPrice + "','" + jsonEatate + "','" + jsonfollow + "','" + jsonImages + "','" + jsonFangping + "')");
// webDetail.loadUrl("javascript:javaCallJs('" + SharedPreferencesUtil.getUserId(mActivity) + "','" + propertyId + "','" + SharedPreferencesUtil.getToken(mActivity) + "')");
progDialog.dismiss();
nonelayout.setVisibility(View.GONE);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
}
这是我自己代码,H5和android原生交互的