`
simaguang
  • 浏览: 2030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

android捕获js中的dialog事件

阅读更多
来源google开源项目

http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/

我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。

Javascript弹出框有如下三种:

   alert();
   window.confirm("Are you srue?");
   window.prompt("Please input some word";,"this is text");


WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
onProgressChanged(WebView view, int newProgress);
onReceivedIcon(WebView view, Bitmap icon);
onReceivedTitle(WebView view, String title);
onRequestFocus(WebView view);
onCloseWindow(WebView window);
onProgressChanged(WebView view, int newProgress)

这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
public class WebViewDemo extends Activity {

    private static final String LOG_TAG = "WebViewDemo";
    private WebView mWebView;
    private TextView mReusultText ;
    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);
        setContentView(R.layout.main);
        //获得浏览器组件
        //WebView就是一个简单的浏览器
        //android浏览器源码存在于LINUX\android\package\apps\Browser中
        //里面的所有操作都是围绕WebView来展开的
        mWebView = (WebView) findViewById(R.id.webview);
        mReusultText = (TextView) findViewById(R.id.resultText);
        //WebSettings 几乎浏览器的所有设置都在该类中进行
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setSavePassword(false);
        webSettings.setSaveFormData(false);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(false);
        mWebView.setWebChromeClient(new MyWebChromeClient());
        /*
         * DemoJavaScriptInterface类为js调用android服务器端提供接口
         * android 作为DemoJavaScriptInterface类的客户端接口被js调用
         * 调用的具体方法在DemoJavaScriptInterface中定义:
         * 例如该实例中的clickOnAndroid
         */
        mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"androd");
        mWebView.loadUrl("file:///android_asset/page.html");
    }

    final class DemoJavaScriptInterface {
        DemoJavaScriptInterface() {}

        /**
         * 该方法被浏览器端调用
         */
        public void clickOnAndroid() {
            mHandler.post(new Runnable() {
                public void run() {
                    //调用js中的onJsAndroid方法
                    mWebView.loadUrl("javascript:onJsAndroid()");
                }
            });
        }
    }

    /**
     * 继承WebChromeClient类
     * 对js弹出框时间进行处理
     * 
     */
    final class MyWebChromeClient extends WebChromeClient {

        /**
    	 * 处理alert弹出框
    	 */
        @Override
        public boolean onJsAlert(WebView view,String url,
                                 String message,JsResult result) {
            Log.d(LOG_TAG,"onJsAlert:"+message");
            mReusultText.setText("Alert:"+message);
            //对alert的简单封装
            new AlertDialog.Builder(WebViewDemo.this).
                setTitle("Alert").setMessage(message).setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
			        @Override
			        public void onClick(DialogInterface arg0, int arg1) {
			           //TODO
			       }
			}).create().show();
            result.confirm();
            return true;
        }

        /**
         * 处理confirm弹出框
         */
        @Override
        public boolean onJsConfirm(WebView view, String url, String message,
        		JsResult result) {
        	Log.d(LOG_TAG, "onJsConfirm:"+message);
        	mReusultText.setText("Confirm:"+message);
        	result.confirm();
        	return super.onJsConfirm(view, url, message, result);
        }

        /**
         * 处理prompt弹出框
         */
        @Override
        public boolean onJsPrompt(WebView view, String url, String message,
        		String defaultValue, JsPromptResult result) {
        	Log.d(LOG_TAG,"onJsPrompt:"+message);
        	mReusultText.setText("Prompt input is :"+message);
        	result.confirm();
        	return super.onJsPrompt(view, url, message, message, result);
        }
    }
}


  java代码如上所示,html页面代码放在code文件中,在这不做讲解。
在项目中有两个链接:
 jsDemo为以上代码对应的html
 webDemo为google开源项目中的文件

导入工程后请配置Build Path, sdk1.6以上版本均可兼容。
0
0
分享到:
评论

相关推荐

    Android 控制关闭Dialog

    在Android开发中,Dialog是一种常见的用户交互元素,用于在用户界面中显示临时信息或进行简单的交互操作。通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动...

    Android 底部弹出dialog+动画

    在Android开发中,底部弹出Dialog是一种常见的交互方式,它用于显示临时信息或者提供用户一些简短的操作选项。本文将详细讲解如何实现一个带有动画效果的底部弹出Dialog,并通过具体的代码实例进行演示。 首先,...

    各种Android Dialog创建及其监听事件实现

    在Android开发中 我们经常会需要在Android界面上弹出一些对话框 比如询问用户或者让用户选择 关于Android Dialog的使用方法 已经有很多blog做出了详细的介绍(比如博客:7种形式的Android Dialog使用举例) 但是只是...

    各种android弹出dialog效果以及各种dialog样式

    各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...

    Android-dialog库可以在任意类内调用子线程或ui线程内均可显示

    在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户展示临时信息、请求确认或者提供选项。标题提到的“Android-dialog库”是Android开发中的一个第三方库,它提供了一种灵活的方式,使得...

    Android中dialog常用样式

    本资源集合了Android中常用的Dialog样式,通过分析和学习,可以帮助开发者更高效地创建符合设计要求的对话框。 首先,让我们了解Dialog的基本结构和使用方式。Dialog是基于Activity的,通常由`AlertDialog.Builder`...

    android在dialog中显示二维码

    在Android中,我们可以使用Zxing库或Google的`com.google.zxing`库来生成二维码。这里我们以Zxing为例,它提供了`com.google.zxing.client.android.EncodeActivity`类来帮助我们生成二维码图片。 1. **集成Zxing库*...

    Android Dialog中加载GIF

    在Android开发中,有时我们需要在Dialog中展示动态内容,如GIF动图,来提供更丰富的用户交互体验。本文将详细讲解如何在Android Dialog中利用Glide库加载并播放GIF。 首先,Glide是一个非常流行的Android图片加载库...

    Android五种显示Dialog的方法实现

    在Android开发中,Dialog是一种非常常见的用户界面组件,它用于在主界面之上显示临时信息或者进行简单的交互。本文将详细讲解五种不同的方法来在Android应用中实现Dialog,并结合源码进行解析。 1. **AlertDialog**...

    android自定义精美的dialog

    本篇文章将深入探讨如何在Android中创建带有多种动画效果的自定义Dialog。 首先,我们要理解Android Dialog的基础概念。Dialog是一种轻量级的窗口,它浮现在应用的主视图之上,用于向用户展示临时信息或进行简单的...

    Android自定漂亮Dialog中嵌入ListView

    本教程将探讨如何在Android中自定义一个美观的Dialog,并在其内部嵌入一个ListView,以便展示更多信息。这个自定义Dialog可以用于显示一系列可选项目,用户可以通过点击ListView中的条目来进行交互。 首先,我们...

    Android Dialog全屏显示、动画显示

    在Android开发中,自定义Dialog是一种常见的用户交互方式,它能提供更为丰富的界面和功能,以满足特定场景下的需求。本教程将详细讲解如何创建一个全屏显示且带有动画效果的自定义Dialog,并结合相机和图片选择的...

    Android课件(4Dialog).zip

    在Android开发中,Dialog是一种非常重要的组件,它用于在用户界面中显示临时的、轻量级的窗口,通常用于向用户展示警告、确认信息或者进行简单的交互操作。本课件"Android课件(4Dialog).zip"可能包含了关于如何在...

    安卓Android源码——(Dialog对话框).rar

    本文将深入探讨安卓Android源码中的Dialog对话框,揭示其工作原理及如何自定义和使用。 首先,让我们了解Dialog的基本结构。在Android框架中,Dialog类是基于AlertDialog.Builder构建的,它提供了多种类型的对话框...

    Android自定义Dialog多选对话框(Dialog+Listview+CheckBox)

    在Android中,Dialog通常通过继承`AlertDialog.Builder`或直接使用`AlertDialog`类来创建。在这个例子中,我们可能会创建一个新的类,扩展`AlertDialog`或`DialogFragment`,以便更好地管理和控制Dialog的生命周期。...

    android dialog输入框获取数据

    3. **理解基本概念**:熟悉Android中Dialog的基本用法,了解LayoutInflater的作用及如何使用findViewById方法获取控件引用。 #### 三、实现步骤 接下来,我们将按照以下步骤来实现带有输入框的Dialog,并从中获取...

    Android自定义显示内容的Dialog

    在Android开发中,有时我们可能需要创建具有独特设计和功能的对话框,以满足特定的用户界面需求。这里我们将深入探讨两种实现自定义显示内容的Dialog的方法:继承Dialog和继承PopupWindow。 首先,我们来看继承...

    很好android自定义dialog加载转圈等待,适合初学,透明+正常两种主题

    首先,我们要了解Android中的Dialog。Dialog是Android UI组件之一,它浮现在应用程序的窗口之上,用来显示一些临时信息或者请求用户的输入。默认的Dialog样式可能不能满足所有设计需求,因此自定义Dialog就显得尤为...

    自定义Android Dialog EditText 密码输入框

    在Android开发中,自定义Dialog是一项常见的需求,它允许开发者根据应用的UI风格和功能需求进行个性化设计。本文将深入探讨如何自定义一个Android Dialog,特别是实现一个类似于支付密码输入框的功能,其中EditText...

Global site tag (gtag.js) - Google Analytics