/
MyWebViewClient.java
118 lines (104 loc) · 4.11 KB
/
MyWebViewClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.example.jingbin.webviewstudy.config;
import android.content.DialogInterface;
import android.net.http.SslError;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.SslErrorHandler;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AlertDialog;
/**
* Created by jingbin on 2016/11/17.
* 监听网页链接:
* - 根据标识:打电话、发短信、发邮件
* - 进度条的显示
* - 添加javascript监听
* - 唤起京东,支付宝,微信原生App
*/
public class MyWebViewClient extends WebViewClient {
private IWebPageView mIWebPageView;
public MyWebViewClient(IWebPageView mIWebPageView) {
this.mIWebPageView = mIWebPageView;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e("jing", "----url:" + url);
if (TextUtils.isEmpty(url)) {
return false;
}
return mIWebPageView.isOpenThirdApp(url);
}
@Override
public void onPageFinished(WebView view, String url) {
// html加载完成之后,添加监听图片的点击js函数
mIWebPageView.onPageFinished(view, url);
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
//6.0以下执行
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return;
}
String mErrorUrl = "file:///android_asset/404_error.html";
view.loadUrl(mErrorUrl);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
// WebTools.handleReceivedHttpError(view, errorResponse);
// 这个方法在 android 6.0才出现
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
int statusCode = errorResponse.getStatusCode();
if (404 == statusCode || 500 == statusCode) {
String mErrorUrl = "file:///android_asset/404_error.html";
view.loadUrl(mErrorUrl);
}
}
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (request.isForMainFrame()) {//是否是为 main frame创建
String mErrorUrl = "file:///android_asset/404_error.html";
view.loadUrl(mErrorUrl);
}
}
}
/**
* 解决google play上线 WebViewClient.onReceivedSslError问题
*/
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setMessage("SSL认证失败,是否继续访问?");
builder.setPositiveButton("继续", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
// 视频全屏播放按返回页面被放大的问题
@Override
public void onScaleChanged(WebView view, float oldScale, float newScale) {
super.onScaleChanged(view, oldScale, newScale);
if (newScale - oldScale > 7) {
view.setInitialScale((int) (oldScale / newScale * 100)); //异常放大,缩回去。
}
}
}