关于webviewclient 和 webchromeclient
一、区别
在android中使用webview时经常使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢?
WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如
onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
看上去他们有很多不同,实际使用的话,如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。
更多的时候,你可以这样
WebView webView;
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
这样你的WebView理论上就能有大部分需要实现的特色了
当然,有些更精彩的内容还是需要你自己添加的
二、WebViewClient
view.loadUrl(url);
return true;
}
在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。
2、public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
}
重写此方法可以让webview处理https请求。
3、public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
return super.shouldOverrideKeyEvent(view, event);
}
}
重写此方法才能够处理在浏览器中的按键事件。
4、 public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onLoadResource ");
}
super.onLoadResource(view, url);
}
在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
5、 public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageStarted ");
}
if (url.endsWith(".apk")) {
download(url);//下载处理
}
super.onPageStarted(view, url, favicon);
}
在页面加载开始时调用。
6、public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageFinished ");
}
super.onPageFinished(view, url);
}
在页面加载结束时调用。
三、实现
public class BaseWebViewClient extends WebViewClient { @Override public void onReceivedError(final WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); String dataString = "error.html"; view.loadDataWithBaseURL(failingUrl, dataString, "text/html", "UTF-8", ""); Handler handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() { view.clearHistory(); } }, 100); } }
相关推荐
在Android平台上,应用程序之间的交互是通过Intent机制实现的,这使得一个App能够启动另一个App,或者触发特定的操作。"Android 一个app启动另一个app"这个主题涉及到的核心知识点包括Intent的使用、Intent Filter的...
综上所述,"avatar-android-master"这个项目可能是一个使用Android Studio开发的购物APP示例,它展示了如何利用Android Studio的各种功能来构建一个完整的购物应用,涵盖了界面设计、数据库操作、网络通信、用户体验...
在Android平台上,传感器应用是移动开发的一个重要领域,它允许开发者创建各种有趣和实用的交互式功能。"摇一摇"动作就是一个常见的用户交互模式,常用于游戏、抽奖或者清理缓存等场景。本篇文章将深入探讨如何在...
本项目"Android扫雷游戏"就是利用Android Studio进行开发的一个实例,旨在帮助初学者理解Android编程的基本概念和技术。扫雷游戏,作为一款经典的小游戏,它的实现过程涵盖了Android应用开发的多个核心知识点。 1. ...
在Android开发中,"扫一扫"功能通常用于二维码和条形码扫描,这为用户提供了快速获取信息或执行操作的方式。Zxing(ZXing,意为“条形码阅读器”)是一个开源的、跨平台的二维码和条形码读取库。在Android Studio中...
在Android平台上,开发一款“一键清理后台”应用可以帮助用户快速释放设备内存,提高系统运行速度。这个功能通常包括清理正在运行的应用程序、终止不必要的服务以及管理后台进程。下面将详细介绍如何在Android 4.4...
在Android开发中,串口通信(Serial Port Communication)是一种重要的技术,它允许设备之间通过串行接口进行数据交换。在Android Studio环境下实现串口通信,开发者可以构建与硬件设备交互的应用,例如读取传感器...
在Android开发中,"微信扫一扫"是一个非常受欢迎的功能,它让用户可以快速扫描二维码或条形码,进行各种操作,如跳转网页、添加联系人、支付等。本项目旨在通过集成谷歌的ZXing(Zebra Crossing)库,来实现一个与...
以下将详细解析这个"Android一个小闹钟例子"所涵盖的技术点。 首先,我们需要理解Android的AlarmManager服务。AlarmManager是Android系统提供的一个用于安排周期性或者一次性任务的服务。在这个小闹钟例子中,...
在Android应用开发中,抽屉菜单(Drawer Menu)是一种常见的设计模式,用于提供导航功能,让用户可以从屏幕边缘滑出一个包含多个选项的列表。这种设计通常遵循Material Design指南,是Google推荐的Android应用界面...
我们可以使用Android的`GridView`或`RecyclerView`来实现这个视图,每个单元格代表一个月、一天或一小时。结合滚动事件和点击事件,我们可以让用户轻松地导航和选择。 博客文章“Android自定义日期选择器源码”可能...
在Android应用开发中,引导界面(也称为启动教程或新手引导)是一种常见的设计模式,用于初次启动应用时向用户介绍其主要功能和操作方式。本文将深入探讨如何在Android项目中实现一个应用程序只启动一次的引导界面,...
Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译 配置文件就是 Android.mk。在 Android...
WebView是Android系统提供的一种组件,它能够加载并显示网页内容,就像是一个内置的浏览器。通过WebView,开发者可以在原生Android应用中嵌入HTML、CSS和JavaScript代码,从而构建混合式应用。 当需要在JavaScript...
在Android开发中,创建一个图片浏览器是常见的需求,主要用于展示用户拍摄或选择的照片。这个"GalleryDemo"项目正是为了实现这样一个功能,它提供了一个类似系统自带的图片浏览体验,包括图片的缩放和平滑滑动。 一...
在Android系统中添加以太网(Ethernet)功能是一项涉及到网络接口和系统服务集成的重要操作。在Android设备上,以太网通常用于提供稳定的有线网络连接,尤其在没有Wi-Fi或者无线信号不稳定的情况下。以下是对如何在...
《Android点餐系统项目》是一门深度探讨如何在Android平台上构建无线点餐系统的视频教程,旨在教授学员如何利用Android技术实现一个完整的点餐系统,包括客户端和服务端的开发。这门课程涵盖了移动应用开发的多个...
本教程将带你了解如何在Android Studio中实现一个带有动画效果的可弹出并收回的按钮菜单。这个功能不仅能够增加应用的交互性,还能为用户提供一种新颖的互动方式。 首先,我们需要设置一个基础的布局,通常是一个...
在Android开发中,为UI元素添加虚线、圆角和渐变效果是常见的需求,可以提升应用的视觉吸引力。下面将详细讲解如何实现这些效果。 ### 一、虚线(Dashed Line) 在Android中,我们可以使用`Shape Drawable`来创建...
Android应用开发的哲学是把一切...这一节讲Android组件化设计的背景、理念、原则,以及Android在OS级别上提供的组件化支持,其中还会包含一个实验来验证这种组件化设计思想,可以对Android系统有一个高层次的抽象理解。