80,352
社区成员
发帖
与我相关
我的任务
分享
menuWeb.setWebViewClient(new WebViewClient() {//在本界面打开超链接
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);//如果网页里面有超链接,点击在本网页打开,如果不设置,会打开系统浏览器
return true;
}
/**
* 网页页面开始加载的时候,执行的回调方法
* @param view
* @param url
* @param favicon
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {//网页页面开始加载的时候
rlWebLoadingLayout.setVisibility(View.VISIBLE);//显示正在加载动画
rlLoadingErrorInfo.setVisibility(View.GONE);//隐藏加载错误界面
webViewLayout.setVisibility(View.GONE);//隐藏网页内容界面
super.onPageStarted(view, url, favicon);
Log.i(TAG, "onPageStarted: __________url________: " + url);
getStatusCode(url);
}
/**
* 网页加载结束的时候执行的回调方法
* @param view
* @param url
*/
@Override
public void onPageFinished(WebView view, String url) {//网页加载结束的时候
rlWebLoadingLayout.setVisibility(View.GONE);//隐藏加载动画
if (!loadError) {
webViewLayout.setVisibility(View.VISIBLE);
} else {
//您找的页面暂时走丢了...
rlLoadingErrorInfo.setVisibility(View.VISIBLE);//显示加载错误界面
}
Log.i(TAG, "_________________________onPageFinished________________________");
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
loadError = true;
Log.i(TAG, "_________________×________onReceivedError________________________");
}
//
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
loadError = true;
Log.i(TAG, "_________________________onReceivedSslError________________________");
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
loadError = true;
Log.i(TAG, "_________________________onReceivedHttpError________________________");
}
/**
* 页面加载错误时执行的方法,但是在6.0以下,有时候会不执行这个方法
* @param view
* @param request
* @param error
*/
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
loadError = true;
Log.i(TAG, "________________VERSION_CODES.M_________onReceivedError________________________");
}
});
menuWeb.setWebChromeClient(new WebChromeClient() {
/**
* 当WebView加载之后,返回 HTML 页面的标题 Title
* @param view
* @param title
*/
@Override
public void onReceivedTitle(WebView view, String title) {
//判断标题 title 中是否包含有“error”字段,如果包含“error”字段,则设置加载失败,显示加载失败的视图
if (!TextUtils.isEmpty(title) && ((title.toLowerCase().contains("error") || title.toLowerCase().contains("404")))) {
loadError = true;
}
Log.i(TAG, "_________________________title________________________" + title);
}
});
if (mName != null && mName.equals(getString(R.string.map))) {
/**
* 伪装成电脑版的请求,返回的网页布局也是电脑版,
* 因为地图导航手机版对城市要求必须是有个精确的地点,
* 而电脑版不需要这么精确,直接说城市名即可
* */
settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");
}
menuWeb.loadUrl(linksUrl);//linksUrl
}
private void getStatusCode(final String url) {
OkHttpUtils.get().url(url).build().execute(new Callback() {
@Override
public Object parseNetworkResponse(Response response, int id) throws Exception {
return null;
}
@Override
public void onError(Call call, Exception e, int id) {
loadError = true;
}
@Override
public void onResponse(Object response, int id) {
}
});
}