Android WebView的使用(二)

来源:互联网 发布:免费通话录音软件 编辑:程序博客网 时间:2024/05/23 17:51

WebView之WebViewClient、WebChromeClient


1.WebViewClient用来处理各种通知、请求等事件,WebView调用setWebViewClient()来指定一个WebViewClient对象。


WebViewClient常用方法

1. doUpdateVisitedHistory, 更新历史记录

2. onFormResubmission, 重新请求网页数据

3. onLoadResource, 加载资源

4. onPageFinished, 网页加载完毕

5. onPageStarted, 网页开始加载

6. onReceivedError, 报告错误信息

7. onScaleChanged, 发生Scale改变

8. shouldOverrideUrlLoading, 控制新的连接在当前WebView中打开

新建MyWebViewClient继承WebViewClient,重写其中的方法,通过setWebViewClient指定

mWebView.setWebViewClient(new MyWebViewClient());  
       

<span style="font-size:14px;">    private class MyWebViewClient extends WebViewClient{@Overridepublic void doUpdateVisitedHistory(WebView view, String url,boolean isReload) {// TODO Auto-generated method stubsuper.doUpdateVisitedHistory(view, url, isReload);Log.d("MyWebViewClient", "doUpdateVisitedHistory, 更新历史记录 url = " + url);}@Overridepublic void onFormResubmission(WebView view, Message dontResend,Message resend) {// TODO Auto-generated method stubsuper.onFormResubmission(view, dontResend, resend);Log.d("MyWebViewClient", "onFormResubmission, 重新请求网页数据 dontResend = " + dontResend + "-- resend = " + resend);}@Overridepublic void onLoadResource(WebView view, String url) {// TODO Auto-generated method stubsuper.onLoadResource(view, url);Log.d("MyWebViewClient", "onLoadResource, 加载资源  url = " + url);}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);Log.d("MyWebViewClient", "onPageFinished, 网页加载完毕  url = " + url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {// TODO Auto-generated method stubsuper.onPageStarted(view, url, favicon);Log.d("MyWebViewClient", "onPageStarted, 网页开始加载  url = " + url);}@Overridepublic void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {// TODO Auto-generated method stubsuper.onReceivedError(view, errorCode, description, failingUrl);Log.d("MyWebViewClient", "onLoadResource, 报告错误信息  failingUrl = " + failingUrl);}@Overridepublic void onReceivedHttpAuthRequest(WebView view,HttpAuthHandler handler, String host, String realm) {// TODO Auto-generated method stubsuper.onReceivedHttpAuthRequest(view, handler, host, realm);Log.d("MyWebViewClient", "onReceivedHttpAuthRequest  realm = " + realm);}@SuppressLint("NewApi") @Overridepublic void onReceivedLoginRequest(WebView view, String realm,String account, String args) {// TODO Auto-generated method stubsuper.onReceivedLoginRequest(view, realm, account, args);Log.d("MyWebViewClient", "onReceivedLoginRequest  realm = " + realm);}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {// TODO Auto-generated method stubsuper.onReceivedSslError(view, handler, error);Log.d("MyWebViewClient", "onReceivedSslError  error = " + error);}@Overridepublic void onScaleChanged(WebView view, float oldScale, float newScale) {// TODO Auto-generated method stubsuper.onScaleChanged(view, oldScale, newScale);Log.d("MyWebViewClient", "onScaleChanged, 发生Scale改变  oldScale = " + oldScale);}@Overridepublic void onTooManyRedirects(WebView view, Message cancelMsg,Message continueMsg) {// TODO Auto-generated method stubsuper.onTooManyRedirects(view, cancelMsg, continueMsg);Log.d("MyWebViewClient", "onTooManyRedirects  continueMsg = " + continueMsg);}@Overridepublic void onUnhandledKeyEvent(WebView view, KeyEvent event) {// TODO Auto-generated method stubsuper.onUnhandledKeyEvent(view, event);Log.d("MyWebViewClient", "onUnhandledKeyEvent  event = " + event);}@SuppressLint("NewApi") @Overridepublic WebResourceResponse shouldInterceptRequest(WebView view,String url) {// TODO Auto-generated method stubLog.d("MyWebViewClient", "shouldInterceptRequest  url = " + url);return super.shouldInterceptRequest(view, url);}@Overridepublic boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {// TODO Auto-generated method stubLog.d("MyWebViewClient", "shouldOverrideKeyEvent  event = " + event);return super.shouldOverrideKeyEvent(view, event);}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// TODO Auto-generated method stubLog.d("MyWebViewClient", "shouldOverrideUrlLoading  url = " + url);view.loadUrl(url);      return super.shouldOverrideUrlLoading(view, url);}        }</span>

2.WebChromeClient用来处理JavaScript对话框、网站图标、网站title、加载进度等

WebChromeClient常用方法

1. onCloseWindow,

2. onCreateWindow,

3. onJsAlert,

响应在Html页面JS调用alert("Good Morning!");,可以自己新建AlertDialog代替JS Alert,需要

return true;

如果

return super.onJsAlert(view, url, message, result);

会继续调用系统Alert

4. onJsConfirm,

confirm("Are you ok?");其它同Alert

5. onJsPrompt,

prompt("What’s yourname?"); 其它同Alert

6. onProgressChanged,

页面加载进度

7. onReceivedIcon,

返回页面icon,在HTML页面设置如下

<link rel="shortcut icon" href="./images/icon1.png" >

8. onReceivedTitle,

返回页面icon,在HTML页面设置如下

<title>Android WebView Test</title>


9. onRequestFocus


具体操作如下:

新建MyWebChromeClient继承WebViewClient,重写其中的方法,通过setWebChromeClient指定

mWebView.setWebChromeClient(new MyWebChromeClient());

private class MyWebChromeClient extends WebChromeClient{@Overridepublic void onCloseWindow(WebView window) {// TODO Auto-generated method stubsuper.onCloseWindow(window);Log.d("MyWebChromeClient", "onCloseWindow");}@Overridepublic boolean onCreateWindow(WebView view, boolean isDialog,boolean isUserGesture, Message resultMsg) {// TODO Auto-generated method stubLog.d("MyWebChromeClient", "onCreateWindow resultMsg = " + resultMsg);return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);}@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {// TODO Auto-generated method stubLog.d("MyWebChromeClient", "onJsAlert url = " + url + " message = " + message);//构建一个Builder来显示网页中的alert对话框               Builder builder = new Builder(MainActivity.this);               builder.setTitle("提示对话框");              builder.setMessage(message);               builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){                   @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                       result.confirm();                   }               });               builder.setCancelable(false);              builder.create();               builder.show();               return true;   //return super.onJsAlert(view, url, message, result);}@Overridepublic boolean onJsConfirm(WebView view, String url, String message,final JsResult result) {// TODO Auto-generated method stubLog.d("MyWebChromeClient", "onJsConfirm url = " + url + " message = " + message);Builder builder = new Builder(MainActivity.this);               builder.setTitle("带选择的对话框");              builder.setMessage(message);               builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){                   @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                       result.confirm();                   }               });               builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener(){                   @Override                  public void onClick(DialogInterface dialog, int which) {                      // TODO Auto-generated method stub                       result.cancel();                   }               });               builder.setCancelable(false);              builder.create();               builder.show();               return true;               //return super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {// TODO Auto-generated method stubLog.d("MyWebChromeClient", "onJsPrompt url = " + url + " message = " + message);LayoutInflater inflater = LayoutInflater.from(MainActivity.this);               final View v = inflater.inflate(R.layout.prom_dialog, null);               //设置 TextView对应网页中的提示信息               ((TextView)v.findViewById(R.id.TextView_PROM)).setText(message);               //设置EditText对应网页中的输入框               ((EditText)v.findViewById(R.id.EditText_PROM)).setText(defaultValue);               Builder builder = new Builder(MainActivity.this);               builder.setTitle("带输入的对话框 ");              builder.setView(v);               builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener(){                    @Override                   public void onClick(DialogInterface dialog, int which) {                       // TODO Auto-generated method stub                    String value =((EditText)v.findViewById(R.id.EditText_PROM)).getText().toString();                        result.confirm(value);                    }                });               builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener(){                    @Override                   public void onClick(DialogInterface dialog, int which) {                       // TODO Auto-generated method stub                        result.cancel();                    }               });               builder.setOnCancelListener(new DialogInterface.OnCancelListener(){                    @Override                   public void onCancel(DialogInterface dialog){                        // TODO Auto-generated method stub                        result.cancel();                    }               });               builder.create();               builder.show();               return true;                //return super.onJsPrompt(view, url, message, defaultValue, result);}@Overridepublic void onProgressChanged(WebView view, int newProgress) {// TODO Auto-generated method stubsuper.onProgressChanged(view, newProgress);Log.d("MyWebChromeClient", "onProgressChanged newProgress = " + newProgress);}@Overridepublic void onReceivedIcon(WebView view, Bitmap icon) {// TODO Auto-generated method stubsuper.onReceivedIcon(view, icon);Log.d("MyWebChromeClient", "onReceivedIcon icon = " + icon);ImageView imageView = (ImageView)findViewById(R.id.imageview);imageView.setImageBitmap(icon);}@Overridepublic void onReceivedTitle(WebView view, String title) {// TODO Auto-generated method stubsuper.onReceivedTitle(view, title);Log.d("MyWebChromeClient", "onReceivedTitle title = " + title);}@Overridepublic void onRequestFocus(WebView view) {// TODO Auto-generated method stubsuper.onRequestFocus(view);Log.d("MyWebChromeClient", "onRequestFocus");}        }



0 0