Android与Javascript交互示例(三)
16lz
2021-01-26
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>
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android手机监控应用(二)
- Application 判断 是否在主进程、主线程
- Android在SurfaceView做动画一般方法
- Android(安卓)Service学习之IntentService 深入分析
- 9.10 安卓常用工具类之一 对话 ---- DialogUtil
- Android-AsyncTask源码学习
- ApiDemo/FragmentRetainInstance 解析
- Android线程Handler小结(一)