Android与Javascript交互示例(三)

MainAcivity如下:

package cn.testjavascriptdialog;

import android.os.Bundle;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.app.Dialog;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.view.LayoutInflater;

import android.view.View;

import android.webkit.JsPromptResult;

import android.webkit.JsResult;

import android.webkit.WebChromeClient;

import android.webkit.WebView;

import android.widget.EditText;

/**

 * Demo描述:

 * 测试Android响应Javascript的三种对话框

 * 

 * 参考资料:

 * http://www.cnblogs.com/luckjun/archive/2013/03/22/2976117.html

 */

public class MainActivity extends Activity {

	 private WebView mWebView;

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		init();

	}



	private void init(){

		mWebView=(WebView) findViewById(R.id.webView);

		initWebViewSettings();

		// 为WebView设置WebChromeClient

		mWebView.setWebChromeClient(new WebChromeClientSubClass());

		//加载本地Html文件

		mWebView.loadUrl("file:///android_asset/test.html");

	}

	private void initWebViewSettings(){

		mWebView.setVerticalScrollBarEnabled(false);

		mWebView.setHorizontalScrollBarEnabled(false);

		mWebView.getSettings().setJavaScriptEnabled(true);

		mWebView.getSettings().setSupportZoom(true);

		mWebView.getSettings().setDomStorageEnabled(true);

		mWebView.getSettings().setPluginsEnabled(true);

		mWebView.requestFocus();

		mWebView.getSettings().setUseWideViewPort(true);

		mWebView.getSettings().setLoadWithOverviewMode(true);

		mWebView.getSettings().setSupportZoom(true);

		mWebView.getSettings().setBuiltInZoomControls(true);

	}



	private class WebChromeClientSubClass extends WebChromeClient{

		@Override

		public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {

			Dialog alertDialog=null;

			AlertDialog.Builder builder=new Builder(MainActivity.this);

			builder.setTitle("Javascript的alert对话框");

			builder.setMessage(message);

			builder.setNegativeButton("OK", new OnClickListener() {

				@Override

				public void onClick(DialogInterface arg0, int arg1) {

					System.out.println("现在显示的是Javascript的alert对话框");

					//注意:

					//必须要这一句代码:result.confirm()表示:

					//处理结果为确定状态同时唤醒WebCore线程 

					//否则不能继续点击按钮

					result.confirm();

				}

			});

			alertDialog=builder.create();

			alertDialog.show();

			return true;

		}

		@Override

		public boolean onJsConfirm(WebView view, String url, String message,final JsResult result) {

			Dialog confirmDialog=null;

			AlertDialog.Builder builder=new Builder(MainActivity.this);

			builder.setTitle("Javascript的confirm对话框");

			builder.setMessage(message);

			builder.setPositiveButton("OK", new OnClickListener() {

				@Override

				public void onClick(DialogInterface arg0, int arg1) {

					System.out.println("现在点击的是Javascript的confirm对话框的OK");

					//处理结果为确定状态同时唤醒WebCore线程 

					result.confirm();

				}

			});

			builder.setNegativeButton("NO", new OnClickListener() {

				@Override

				public void onClick(DialogInterface arg0, int arg1) {

					System.out.println("现在点击的是Javascript的confirm对话框的NO");

					//处理结果为取消状态同时唤醒WebCore线程 

					result.cancel();

				}

			});

			confirmDialog=builder.create();

			confirmDialog.show();

			return true;

		}

		@Override

		public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {

			 LayoutInflater inflater = getLayoutInflater(); 

             View promptView = inflater.inflate(R.layout.prompt, null); 

             final EditText nameEditText = (EditText) promptView.findViewById(R.id.nameEditText); 

             nameEditText.setHint("请输入您的名字"); 

               

            Dialog promptDialog=null;

 			AlertDialog.Builder builder=new Builder(MainActivity.this);

 			builder.setView(promptView);

 			builder.setTitle("Javascript的prompt对话框");

 			builder.setPositiveButton("OK", new OnClickListener() {

 				@Override

 				public void onClick(DialogInterface arg0, int arg1) {

 					System.out.println("现在点击的是Javascript的prompt对话框的OK");

 					//处理结果为取消状态且唤醒WebCore线程 

 					//同时弹出alert对话框提示用户

 					result.confirm(nameEditText.getText().toString());

 				}

 			});

 			builder.setNegativeButton("NO", new OnClickListener() {

 				@Override

 				public void onClick(DialogInterface arg0, int arg1) {

 					System.out.println("现在点击的是Javascript的prompt对话框的NO");

 					//处理结果为取消状态同时唤醒WebCore线程 

 					result.cancel();

 				}

 			});

 			promptDialog=builder.create();

 			promptDialog.show();

            return true; 

		}

	}

}


main.xml如下:

<RelativeLayout 

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    >



    <TextView

        android:id="@+id/textView"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="测试Android响应Javascript的三种对话框"

        android:layout_centerHorizontal="true"

     />

    <WebView 

        android:id="@+id/webView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:layout_below="@id/textView"

        />



</RelativeLayout>

 

prompt.xml如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" >



    <EditText

        android:id="@+id/nameEditText"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

     />



</LinearLayout>


test.html如下:

        <html> 

    <head> 

        <script type="text/javascript"> 

            function doAlert() { 

                alert("hello!"); 

            } 

       

            function doConfirm() { 

                confirm("are you sure?"); 

            } 

       

            function doPrompt() { 

                var val = prompt("what's your name?"); 

                if (val) { 

                    alert("your name is:" + val); 

                } 

            } 

       

           

       

            function success(msg) { 

                alert(msg); 

            } 

        </script> 

    </head> 

    <body background="black"> 

        <br>

        <br>

        <input type="button" value="alert" onclick="doAlert()"/><br/> 

        <br>

        <br>

        <input type="button" value="confirm" onclick="doConfirm()"/><br/> 

        <br>

        <br>

        <input type="button" value="prompt" onclick="doPrompt()"/><br/> 

        <br>

        <br>

        

        <div id="result"></div> 

    </body> 

</html> 


 

 

你可能感兴趣的:(JavaScript)