js和Android互調


Javascript彈出框有以下三種: 


javascript

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


WebChromeClient 中對三種dialog進行了捕捉,但不幸的是,並無回調函數能夠使用, 
或者說不能得到用戶是點擊「OK」仍是「CANCEL」的操做結果。 
我的覺得,這些方法的設置是爲了對一些涉及到html操做的應用程序進行測試時使用的。 
在WebChromeClient中還有如下的方法: 
Java代碼  
  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)  

這些方法的使用我會在之後的博文中講到. 
請你們先看今天講解的重點 
Java代碼  
  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瀏覽器源碼存在於LINUX\android\package\apps\Browser中  
  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.     }  
相關文章
相關標籤/搜索