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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private void init(){mWebView=(WebView) findViewById(R.id.webView);initWebViewSettings();// 为WebView设置WebChromeClientmWebView.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{@Overridepublic 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() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {System.out.println("现在显示的是Javascript的alert对话框");//注意://必须要这一句代码:result.confirm()表示://处理结果为确定状态同时唤醒WebCore线程 //否则不能继续点击按钮result.confirm();}});alertDialog=builder.create();alertDialog.show();return true;}@Overridepublic 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() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {System.out.println("现在点击的是Javascript的confirm对话框的OK");//处理结果为确定状态同时唤醒WebCore线程 result.confirm();}});builder.setNegativeButton("NO", new OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {System.out.println("现在点击的是Javascript的confirm对话框的NO");//处理结果为取消状态同时唤醒WebCore线程 result.cancel();}});confirmDialog=builder.create();confirmDialog.show();return true;}@Overridepublic 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> 


更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android手机监控应用(二)
  3. Application 判断 是否在主进程、主线程
  4. Android在SurfaceView做动画一般方法
  5. Android(安卓)Service学习之IntentService 深入分析
  6. 9.10 安卓常用工具类之一 对话 ---- DialogUtil
  7. Android-AsyncTask源码学习
  8. ApiDemo/FragmentRetainInstance 解析
  9. Android线程Handler小结(一)

随机推荐

  1. 基于单节点redis实现分布式锁
  2. 【springboot】使用redisson分布式锁
  3. 【redis】有关redis面试那些事(一)
  4. 【redis】使用redis位图轻松实时统计日活
  5. 5G消息要来了,你们期待吗?
  6. 【java】说说有关jdk动态代理的那些事
  7. 【mysql】ipv4地址转换为4字节整数
  8. 有关Apache dubbo反序列化漏洞的复现及思
  9. 【docker】docker其实很简单
  10. 【docker】容器运行nginx&&挂载宿主机文