jsとAndroidの相互調整

5690 ワード



Javascriptポップアップボックスには、次の3つがあります.
Javaコード
  • alert();  
  • window.confirm("Are you srue?");  
  • window.prompt("Please input some word";,"this is text");  

  • WebChromeClientでは3種類のdialogをキャプチャしていますが、残念ながらコールバック関数は使用できません.
    あるいはユーザが「OK」をクリックしたか「CANCEL」をクリックしたかの操作結果は得られない. 
    個人的には、これらの方法の設定はhtml操作に関連するアプリケーションをテストするために使用されると思います. 
    WebChromeClientでは、次の方法があります.
    Javaコード
  • 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ブラウザのソースコードはLINUXandroidpackageappsBrowserの
  • に存在します.
  • //内のすべての操作は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);  
  •         }  
  •     }