Android-----js和android的互调

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

Javascript弹出框有如下三种: 

Java代码  
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)  
这些方法的使用我会在以后的博文中讲到. 
请大家先看今天讲解的重点 

Java代码  
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);  
        }  
    }  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值