zoukankan      html  css  js  c++  java
  • Android-----js和android的互调

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

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

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

    Javascript弹出框有如下三种: 

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


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

    这些方法的使用我会在以后的博文中讲到. 
    请大家先看今天讲解的重点 
    1. public class WebViewDemo extends Activity {  
    2.   
    3.     private static final String LOG_TAG = "WebViewDemo";  
    4.     private WebView mWebView;  
    5.     private TextView mReusultText ;  
    6.     private Handler mHandler = new Handler();  
    7.   
    8.     @Override  
    9.     public void onCreate(Bundle icicle) {  
    10.   
    11.         super.onCreate(icicle);  
    12.         setContentView(R.layout.main);  
    13.         //获得浏览器组件  
    14.         //WebView就是一个简单的浏览器  
    15.         //android浏览器源码存在于LINUXandroidpackageappsBrowser中  
    16.         //里面的所有操作都是围绕WebView来展开的  
    17.         mWebView = (WebView) findViewById(R.id.webview);  
    18.         mReusultText = (TextView) findViewById(R.id.resultText);  
    19.         //WebSettings 几乎浏览器的所有设置都在该类中进行  
    20.         WebSettings webSettings = mWebView.getSettings();  
    21.         webSettings.setSavePassword(false);  
    22.         webSettings.setSaveFormData(false);  
    23.         webSettings.setJavaScriptEnabled(true);  
    24.         webSettings.setSupportZoom(false);  
    25.         mWebView.setWebChromeClient(new MyWebChromeClient());  
    26.         /* 
    27.          * DemoJavaScriptInterface类为js调用android服务器端提供接口 
    28.          * android 作为DemoJavaScriptInterface类的客户端接口被js调用 
    29.          * 调用的具体方法在DemoJavaScriptInterface中定义: 
    30.          * 例如该实例中的clickOnAndroid 
    31.          */  
    32.         mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"androd");  
    33.         mWebView.loadUrl("file:///android_asset/page.html");  
    34.     }  
    35.   
    36.     final class DemoJavaScriptInterface {  
    37.         DemoJavaScriptInterface() {}  
    38.   
    39.         /** 
    40.          * 该方法被浏览器端调用 
    41.          */  
    42.         public void clickOnAndroid() {  
    43.             mHandler.post(new Runnable() {  
    44.                 public void run() {  
    45.                     //调用js中的onJsAndroid方法  
    46.                     mWebView.loadUrl("javascript:onJsAndroid()");  
    47.                 }  
    48.             });  
    49.         }  
    50.     }  
    51.   
    52.     /** 
    53.      * 继承WebChromeClient类 
    54.      * 对js弹出框时间进行处理 
    55.      *  
    56.      */  
    57.     final class MyWebChromeClient extends WebChromeClient {  
    58.   
    59.         /** 
    60.          * 处理alert弹出框 
    61.          */  
    62.         @Override  
    63.         public boolean onJsAlert(WebView view,String url,  
    64.                                  String message,JsResult result) {  
    65.             Log.d(LOG_TAG,"onJsAlert:"+message");  
    66.             mReusultText.setText("Alert:"+message);  
    67.             //对alert的简单封装  
    68.             new AlertDialog.Builder(WebViewDemo.this).  
    69.                 setTitle("Alert").setMessage(message).setPositiveButton("OK",  
    70.                 new DialogInterface.OnClickListener() {  
    71.                     @Override  
    72.                     public void onClick(DialogInterface arg0, int arg1) {  
    73.                        //TODO  
    74.                    }  
    75.             }).create().show();  
    76.             result.confirm();  
    77.             return true;  
    78.         }  
    79.   
    80.         /** 
    81.          * 处理confirm弹出框 
    82.          */  
    83.         @Override  
    84.         public boolean onJsConfirm(WebView view, String url, String message,  
    85.                 JsResult result) {  
    86.             Log.d(LOG_TAG, "onJsConfirm:"+message);  
    87.             mReusultText.setText("Confirm:"+message);  
    88.             result.confirm();  
    89.             return super.onJsConfirm(view, url, message, result);  
    90.         }  
    91.   
    92.         /** 
    93.          * 处理prompt弹出框 
    94.          */  
    95.         @Override  
    96.         public boolean onJsPrompt(WebView view, String url, String message,  
    97.                 String defaultValue, JsPromptResult result) {  
    98.             Log.d(LOG_TAG,"onJsPrompt:"+message);  
    99.             mReusultText.setText("Prompt input is :"+message);  
    100.             result.confirm();  
    101.             return super.onJsPrompt(view, url, message, message, result);  
    102.         }  
    103.     }  
    104. }  
     
    分类: Android
     
    好文要顶 关注我 收藏该文  
    4
    0
     
    (请您对文章做出评价)
     
    « 上一篇:Android-----WebView使用
    » 下一篇:Android-----RelativeLayout属性
  • 相关阅读:
    JVM调优-Java中的对象
    Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
    Navicat for MySQL 64位破解版
    Idea详细配置
    数据库--悲观锁【收藏,待尝试】
    性能问题分析
    java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
    Mysql show indexes 查看索引状态
    基于(Redis | Memcache)实现分布式互斥锁
    彻底解决每次打开visio都提示windows正在配置visio的问题
  • 原文地址:https://www.cnblogs.com/lenkevin/p/5499833.html
Copyright © 2011-2022 走看看