来源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以上版本均可兼容。

更多相关文章

  1. Could not find SDK_Root\tools\adb.exe 的解决方法
  2. Android高手进阶教程(八)-------Android中两种设置全屏的方法!!!
  3. Android Studio导入.so库文件方法
  4. (转)Android 应用程序退出后不在运行列表中显示的方法
  5. Android Gallery控件使用方法详解
  6. Android 设置横屏竖屏的方法
  7. Android 复习笔记之图解View类的XML属性、相关方法及说明
  8. Android关于looper的几个方法的个人理解

随机推荐

  1. Android问题集锦之十五:可笑的unauthorize
  2. Android非UI线程更新UI的几种方法
  3. 一个好用的android图片压缩工具类
  4. Android 图片处理工具类封装
  5. android 源码修改记录
  6. Android启动init.c
  7. Android 数据无限的List实现(滚动到底部,请
  8. android canvas 使用
  9. 开发教程网址
  10. Android——调用系统相册