WebViewClient主要是对通知应用程序关于历史记录,重新提交请求,加载资源,网页开始加载,网页加载结束,以及接收到的各种错误,是否重载键盘事件,是否重载网页加载。
其中shouldOverrideKeyEvent(WebView view, KeyEvent event)
这个方法将会给应用程序一个同步处理键盘事件的机会。如果返回true,WebView 将不会处理这个键盘事件;如果返回false,WebView 总会处理这个键盘事件,而其祖先view不会看到这个键盘事件。默认的是返回false。
在项目中就碰到这样的一个bug,描述如下:
在网页中打开http://www.baidu.com这个网址,百度的输入框是采用js来进行自动提示的,因此,需要WebSettings.setSupportJavascript(true);当在输入框中输入web后,下面会自动提示相关的Suggestions,问题是当我想按键盘选中某一个Suggestion时,并没有像想象中的那样Suggestion被选中(注:鼠标点击可以触发)。当时也想着,肯定是键盘事件接收出了问题。结果查看大半天才发现是在shouldOverrideKeyEvent方法中,直接返回了true,我去!!!!难怪WebView没能处理这个这个键盘事件。
而shouldOverrideUrlLoading(WebView view, String url)
当一个新的url要在当前WebView中加载时,这个方法将会应用程序接管控制的机会。当WebViewClient没有设置时,默认情况下,WebView会让Activity Manager来选择合适的程序来处理这个url。当WebViewClient被设置时,返回true意味着当前应用程序会处理这个url;返回false意味着当前的WebView会处理这个url。