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); } } }