admin管理员组文章数量:1794759
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
版权声明:本文标题:WebView 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1701471016a428038.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论