private WebChromeClient mWebChromeClient = new WebChromeClient() {
/**
* <video /> 控件在未播放时,会展示为一张海报图,HTML中可通过它的'poster'属性来指定。
* 如果未指定'poster'属性,则通过此方法提供一个默认的海报图。
*
* @return 位图用作默认海报的图像,如果没有此类图像,则为null。
*/
@Nullable
@Override
public Bitmap getDefaultVideoPoster() {
return super.getDefaultVideoPoster();
}
/**
* 当全屏的视频正在缓冲时,此方法返回一个占位视图(比如旋转的菊花)。
* @return 查看视频加载时要显示的视图。 该值可以为null。
*/
@Nullable
@Override
public View getVideoLoadingProgressView() {
return super.getVideoLoadingProgressView();
}
/**
* 获得所有访问历史项目的列表,用于链接着色。
*
* @param callback ValueCallback
*/
@Override
public void getVisitedHistory(ValueCallback<String[]> callback) {
super.getVisitedHistory(callback);
}
/**
* 通知主机应用程序关闭给定的WebView,并在必要时将其从视图系统中删除。 此时,WebCore已停止在此窗口中的任何加载,并已删除javascript中的任何跨脚本编写功能。
*
* 与onCreateWindow(WebView,boolean,boolean,Message)一样,应用程序应确保显示的任何URL或安全性指示符都已更新,以便用户可以告知他们正在与之交互的页面已被关闭。
* @param window 需要关闭的WebView。
*/
@Override
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
}
/**
* 接收JavaScript控制台消息
* @param consoleMessage 包含控制台消息详细信息的对象。
* @return 如果消息由客户端处理,则为true。
*/
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
return false;
}
/**
* 请求宿主应用程序创建一个新窗口。
* 如果主机应用程序选择遵循此请求,则应从此方法返回true,创建新的WebView以托管窗口,将其插入View系统并使用新的WebView作为参数将提供的resultMsg消息发送到其目标。
* 如果主机应用程序选择不遵守请求,则应从此方法返回false。此方法的默认实现不执行任何操作,因此返回false。
*
* 当isUserGesture标志为false时,应用程序通常不允许创建窗口,因为这可能是不需要的弹出窗口。
*
* 应用程序应该小心显示新窗口:不要简单地将其覆盖在现有的WebView上,因为这可能会误导用户他们正在查看的站点。
* 如果您的应用程序显示主页面的URL,请确保以类似的方式显示新窗口的URL。如果您的应用程序未显示URL,请考虑完全禁止创建新窗口。
*
* 注意:没有值得信赖的方法来判断哪个页面请求了新窗口:请求可能来自WebView中的第三方iframe。
*
* @param view 从中发出新窗口请求的WebView。
* @param isDialog 如果新窗口应该是对话框而不是全尺寸窗口,则为true。
* @param isUserGesture 如果请求是由用户手势发起的,则为true,例如用户单击链接。
* @param resultMsg 创建新WebView后要发送的消息。 resultMsg.obj是一个WebView.WebViewTransport对象。 这应该用于通过调用WebView.WebViewTransport #setWebView(WebView)来传输新的WebView。
* @return 如果宿主应用程序将创建一个新窗口,则此方法应返回true,在这种情况下,应将resultMsg发送到其目标。 否则,此方法应返回false。 从此方法返回false但发送resultMsg将导致未定义的行为。
*/
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
}
/**
* 当前一个调用 onGeolocationPermissionsShowPrompt() 取消时,隐藏相关的UI。
*/
@Override
public void onGeolocationPermissionsHidePrompt() {
super.onGeolocationPermissionsHidePrompt();
}
/**
* 指定源的网页内容在没有设置权限状态下尝试使用地理位置API。
* 从API24开始,此方法只为安全的源(https)调用,非安全的源会被自动拒绝
*
* @param origin 尝试使用Geolocation API的Web内容的来源。
* @param callback 用于设置原点的权限状态的回调。
*/
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
/**
* 通知主机应用程序当前页面已退出全屏模式。
* 主机应用程序必须隐藏自定义视图,即。 当内容进入全屏时,视图传递给onShowCustomView(View,WebChromeClient.CustomViewCallback)。
*/
@Override
public void onHideCustomView() {
super.onHideCustomView();
}
/**
* 告诉客户端显示javascript警告对话框。
* 如果客户端返回true,则WebView将假定客户端将处理该对话框。
* 如果客户端返回false,它将继续执行。
*
* @param view 启动回调的WebView。
* @param url 请求对话的页面的URL。
* @param message 要在窗口中显示的消息。
* @param result 一个JsResult确认用户点击进入。
* @return boolean 客户端是否将处理警报对话框。
*/
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
/**
* 显示一个对话框让用户选择是否离开当前页面
* @param view 启动回调的WebView。
* @param url 请求对话的页面的URL。
* @param message 要在窗口中显示的消息。
* @param result JsResult用于将用户的响应发送到javascript。
* @return boolean 客户端是否将处理确认对话框。
*/
public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
return false;
}
/**
* 告诉客户端向用户显示 确认 对话框。
* 如果客户端返回true,则WebView将假定客户端将处理确认对话框并调用相应的JsResult方法。
* 如果客户端返回false,则将返回默认值false为javascript。 默认行为是返回false。
*
* @param view 启动回调的WebView
* @param url 请求对话的页面的URL
* @param message 要在窗口中显示的消息
* @param result JsResult用于将用户的响应发送到javascript
* @return boolean 客户端是否将处理确认对话框。默认行为是返回false
*/
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
return false;
}
/**
* 告诉客户端向用户显示 提示 对话框。
* 如果客户端返回true,则WebView将假定客户端将处理提示对话框并调用相应的JsPromptResult方法。
* 如果客户端返回false,则默认值false将返回到javascript。 默认行为是返回false。
* @param view 启动回调的WebView。
* @param url 请求对话的页面的URL。
* @param message 要在窗口中显示的消息。
* @param defaultValue 提示对话框中显示的默认值。
* @param result 用于将用户的响应发送到javascript的JsPromptResult。
* @return
*/
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
return false;
}
/**
* 通知主机应用程序Web内容请求访问指定资源的权限,并且当前未授予或拒绝该权限。
* 主机应用程序必须调用PermissionRequest#grant(String [])或PermissionRequest #deny()。
* 如果未覆盖此方法,则拒绝该权限。
*
* @param request 来自当前Web内容的PermissionRequest。
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void onPermissionRequest(PermissionRequest request) {
request.deny();
}
/**
* 通知主机应用程序已取消给定的权限请求。
* 因此,应隐藏任何相关的UI。
* @param request
*/
@Override
public void onPermissionRequestCanceled(PermissionRequest request) {
super.onPermissionRequestCanceled(request);
}
/**
* 接收当前页面的加载进度
*
* @param view 启动回调的WebView
* @param newProgress 当前页面加载进度,由0到100之间的整数表示。
*/
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
/**
* 接收图标(favicon)
* @param view 启动回调的WebView
* @param icon 包含当前页面的favicon的位图。
*/
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
/**
* 接收文档标题
* @param view 启动回调的WebView
* @param title 包含文档新标题的String。
*/
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
/**
* 通知url的主机应用程序获取apple-touch-icon。
* Android中处理Touch Icon的方案
* http://droidyue.com/blog/2015/01/18/deal-with-touch-icon-in-android/index.html
* @param view 启动回调的WebView
* @param url 图标网址
* @param precomposed 如果网址是预先组合的触摸图标,则为true。
*/
@Override
public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) {
super.onReceivedTouchIconUrl(view, url, precomposed);
}
/**
* 请求获取取焦点
* 请求显示和关注此WebView。
* 这可能是由于另一个WebView在此WebView中打开一个链接并请求显示此WebView。
* @param view 启动回调的WebView
*/
@Override
public void onRequestFocus(WebView view) {
super.onRequestFocus(view);
}
/**
* 通知应用程序当前页面已进入全屏模式。
* 主机应用程序必须以全屏模式显示,包含Web内容(视频或其他HTML内容)的自定义视图。
* @param view 启动回调的WebView
* @param callback 调用此回调以请求页面退出全屏模式。
*/
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
}
/**
* 为'<input type="file" />'显示文件选择器,返回false使用默认处理
*
* 告诉客户端显示文件选择器。
* 这被称为处理具有“文件”输入类型的HTML表单,以响应用户按下“选择文件”按钮。
* 要取消请求,请调用filePathCallback.onReceiveValue(null)并返回true。
* @param webView 启动回调的WebView
* @param filePathCallback 调用此回调以提供要上载的文件的路径列表,或取消以null。
* 只有在onShowFileChooser(WebView,ValueCallback,WebChromeClient.FileChooserParams)实现返回true时才能调用。
* @param fileChooserParams 描述要打开的文件选择器的模式,以及与其一起使用的选项。
* @return 如果将调用filePathCallback,则为true;如果使用默认处理,则为false。
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
return false;
}
};
webView系列(四)----WebChromeClient
最新推荐文章于 2025-03-08 16:08:49 发布