admin管理员组

文章数量:1794759

WebView

WebView

目录

3.4 WebChromeClient详解

3.4.1 onProgressChanged(当前网页加载的进度)

3.4.2 onReceivedTitle(title变化回调)

3.4.3 onReceivedIcon(icon变化回调)

3.4.4 onReceivedTouchIconUrl

3.4.5 onRequestFocus(请求得到Focus)

3.4.6 onJsAlert(重新JS的Alert界面)

3.4.7 onJsConfirm(重新JS的Confirm界面)

3.4.8 onJsPrompt(重写JS的Prompt界面)


3.4 WebChromeClient详解

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等

3.4.1 onProgressChanged(当前网页加载的进度)

/*** onProgressChanged 通知应用程序当前网页加载的进度。* * 参数说明:* * @param view*            接收WebChromeClient的的webview实例* @param newProgress*            webview接受的进度*/@Overridepublic void onProgressChanged(WebView view, int newProgress) {// TODO Auto-generated method stubsuper.onProgressChanged(view, newProgress);if (newProgress <= 100) {Log.i(TAG, newProgress + "===onProgressChanged===");}}

3.4.2 onReceivedTitle(title变化回调)

/*** 当document 的title变化时,会通知应用程序* * * 参数说明:* * @param view*            接收WebViewClient的webview实例* @param title*            document新的title*/@Overridepublic void onReceivedTitle(WebView view, String title) {// TODO Auto-generated method stubsuper.onReceivedTitle(view, title);Message message = new Message();message.what = 100;message.obj = title;handler.sendMessage(message);}

3.4.3 onReceivedIcon(icon变化回调)

/*** 当前页面有个新的favicon时候,会回调这个函数。 参数说明:* * @param view*            接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new*            MyAndroidWebViewClient()),即是这个webview。* @param icon*            当前页面的favicon 注:很多时间不会跳转到此回调函数,因为很多网站设置了icon,没有设置favicon,*/@Overridepublic void onReceivedIcon(WebView view, Bitmap icon) {// TODO Auto-generated method stubsuper.onReceivedIcon(view, icon);Message message = new Message();message.what = 200;message.obj = icon;handler.sendMessage(message);}

3.4.4 onReceivedTouchIconUrl

/*** 通知应用程序 apple-touch-icon的 url* * 参数说明:* * @param view*            接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new*            MyAndroidWebViewClient()),即是这个webview。* @param url*            apple-touch-icon 的服务端地址* @param precomposed*            如果precomposed 是true 则touch-icon是预先创建的* *            Tips* *            如果应用程序需要这个icon的话, 可以通过这个url获取得到 icon。*/@Overridepublic void onReceivedTouchIconUrl(WebView view, String url,boolean precomposed) {// TODO Auto-generated method stubsuper.onReceivedTouchIconUrl(view, url, precomposed);Log.i(TAG, "====onReceivedTouchIconUrl====");}

3.4.5 onRequestFocus(请求得到Focus)

/*** webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview。*/@Overridepublic void onRequestFocus(WebView view) {// TODO Auto-generated method stubsuper.onRequestFocus(view);Log.i(TAG, "====onRequestFocus====");}

3.4.6 onJsAlert(重新JS的Alert界面)

/*** 覆盖默认的window.alert展示界面,*/@Overridepublic boolean onJsAlert(final WebView view, String url, String message,JsResult result) {final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());builder.setTitle("对话框").setMessage(message).setPositiveButton("确定", null);builder.setOnKeyListener(new OnKeyListener() {public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {Log.v("onJsAlert", "keyCode==" + keyCode + "event=" + event);return true;}});// 禁止响应按back键的事件builder.setCancelable(false);AlertDialog dialog = builder.create();dialog.show();result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。return true;// return super.onJsAlert(view, url, message, result);}

3.4.7 onJsConfirm(重新JS的Confirm界面)

/*** 覆盖默认的window.confirm展示界面,*/@Overridepublic boolean onJsConfirm(final WebView view, String url, String message,final JsResult result) {final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());builder.setTitle("对话框").setMessage(message).setPositiveButton("确定", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.confirm();}}).setNeutralButton("取消", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.cancel();}});builder.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {result.cancel();}});// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题builder.setOnKeyListener(new OnKeyListener() {@Overridepublic boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {Log.v("onJsConfirm", "keyCode==" + keyCode + "event=" + event);return true;}});// 禁止响应按back键的事件// builder.setCancelable(false);AlertDialog dialog = builder.create();dialog.show();return true;}

3.4.8 onJsPrompt(重写JS的Prompt界面)

/*** 覆盖默认的window.prompt展示界面,*/@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());builder.setTitle("对话框").setMessage(message);final EditText et = new EditText(view.getContext());et.setSingleLine();et.setText(defaultValue);builder.setView(et).setPositiveButton("确定", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.confirm(et.getText().toString());}}).setNeutralButton("取消", new OnClickListener() {public void onClick(DialogInterface dialog, int which) {result.cancel();}});// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题builder.setOnKeyListener(new OnKeyListener() {public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {Log.v("onJsPrompt", "keyCode==" + keyCode + "event=" + event);return true;}});// 禁止响应按back键的事件// builder.setCancelable(false);AlertDialog dialog = builder.create();dialog.show();return true;// return super.onJsPrompt(view, url, message, defaultValue,// result);}

 

本文标签: WebView