在Android的webview中定做js的alert,confirm和prompt对话框的方法
http://618119.com/archives/2010/12/20/199.html
1.首先继承android.webkit.WebChromeClient实现MyWebChromeClient。
2.在MyWebChromeClient.java中覆盖onJsAlert,onJsConfirm,onJsPrompt三个方法。
3.在初始化Webview时设置调用webview.setWebChromeClient(new MyWebChromeClient());
4.在Webview载入的html中使用window.alert,window.confirm,window.prompt方法,系统弹出的将是自定义实现的对应对话框。
MyWebChromeClient.java的代码如下:
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnCancelListener;
- import android.content.DialogInterface.OnClickListener;
- import android.content.DialogInterface.OnKeyListener;
- import android.graphics.Bitmap;
- import android.os.Message;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.webkit.JsPromptResult;
- import android.webkit.JsResult;
- import android.webkit.WebChromeClient;
- import android.webkit.WebView;
- import android.widget.EditText;
- /**
- * http://618119.com/archives/2010/12/20/199.html
- */
- //****************************************************************************
- public class MyWebChromeClient extends WebChromeClient {
- @Override
- public void onCloseWindow(WebView window) {
- super.onCloseWindow(window);
- }
- @Override
- public boolean onCreateWindow(WebView view, boolean dialog,
- boolean userGesture, Message resultMsg) {
- return super.onCreateWindow(view, dialog, userGesture, resultMsg);
- }
- /**
- * 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”
- */
- public boolean onJsAlert(WebView view, String url, String message,
- JsResult result) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
- builder.setTitle("对话框")
- .setMessage(message)
- .setPositiveButton("确定", null);
- // 不需要绑定按键事件
- // 屏蔽keycode等于84之类的按键
- builder.setOnKeyListener(new OnKeyListener() {
- public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
- Log.v("onJsAlert", "keyCode==" + keyCode + "event="+ event);
- return true;
- }
- });
- // 禁止响应按back键的事件
- builder.setCancelable(false);
- AlertDialog dialog = builder.create();
- dialog.show();
- result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
- return true;
- // return super.onJsAlert(view, url, message, result);
- }
- public boolean onJsBeforeUnload(WebView view, String url,
- String message, JsResult result) {
- return super.onJsBeforeUnload(view, url, message, result);
- }
- /**
- * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
- */
- public boolean onJsConfirm(WebView view, String url, String message,
- final JsResult result) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
- builder.setTitle("对话框")
- .setMessage(message)
- .setPositiveButton("确定",new OnClickListener() {
- public void onClick(DialogInterface dialog,int which) {
- result.confirm();
- }
- })
- .setNeutralButton("取消", new OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.cancel();
- }
- });
- builder.setOnCancelListener(new OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- result.cancel();
- }
- });
- // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
- builder.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
- Log.v("onJsConfirm", "keyCode==" + keyCode + "event="+ event);
- return true;
- }
- });
- // 禁止响应按back键的事件
- // builder.setCancelable(false);
- AlertDialog dialog = builder.create();
- dialog.show();
- return true;
- // return super.onJsConfirm(view, url, message, result);
- }
- /**
- * 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
- * window.prompt('请输入您的域名地址', '618119.com');
- */
- public boolean onJsPrompt(WebView view, String url, String message,
- String defaultValue, final JsPromptResult result) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
- builder.setTitle("对话框").setMessage(message);
- final EditText et = new EditText(view.getContext());
- et.setSingleLine();
- et.setText(defaultValue);
- builder.setView(et)
- .setPositiveButton("确定", new OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.confirm(et.getText().toString());
- }
- })
- .setNeutralButton("取消", new OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.cancel();
- }
- });
- // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
- builder.setOnKeyListener(new OnKeyListener() {
- public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
- Log.v("onJsPrompt", "keyCode==" + keyCode + "event="+ event);
- return true;
- }
- });
- // 禁止响应按back键的事件
- // builder.setCancelable(false);
- AlertDialog dialog = builder.create();
- dialog.show();
- return true;
- // return super.onJsPrompt(view, url, message, defaultValue,
- // result);
- }
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- super.onProgressChanged(view, newProgress);
- }
- @Override
- public void onReceivedIcon(WebView view, Bitmap icon) {
- super.onReceivedIcon(view, icon);
- }
- @Override
- public void onReceivedTitle(WebView view, String title) {
- super.onReceivedTitle(view, title);
- }
- @Override
- public void onRequestFocus(WebView view) {
- super.onRequestFocus(view);
- }
- }
在Android的webview中定做js的alert,confirm和prompt对话框的方法的更多相关文章
- (转)在Android的webview中定制js的alert,confirm和prompt对话框的方法
1.首先继承android.webkit.WebChromeClient实现MyWebChromeClient. 2.在MyWebChromeClient.java中覆盖onJsAlert,onJsC ...
- 在WebView中加载HTML页面时显示进度对话框的方法
webView.setWebViewClient(new WebViewClient(){ ProgressDialog prDialog; @Overri ...
- 在webView 中使用JS 调用 Android / IOS的函数 Function
最近做一个项目,混合了NativeCode 和 HTML,为了便于JS 调用App的一些方法,统一封装一个Js方法,记录如下 Android 端首先要再WebView中允许JS的调用 WebView ...
- Android原生webview中js交互
http://www.cnblogs.com/android-blogs/p/4891264.html Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中, ...
- Android 响应webview中图片的点击事件
最近碰到个新需求需要点击webview中的图片进行放大显示. 整理了下思路,想到了下面的一个可行的方案. 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地 ...
- 【Android】java中调用JS的方法
最近因为学校换了新的教务系统,想做一个模拟登陆功能,发现登陆的账号和密码有一个js脚本来进行加密 整理了一下java中执行JS的方法 智强教务 账号 密码 加密方法 var keyStr = &quo ...
- WebView中打开相机,文件选择器的问题和解决方法
近几年前端开发真是越来越火,H5页面开发的移动端页面甚至有夺我原生开发半壁江山的意思,忧伤忧伤.不过从实际情况考虑,H5一套代码到处跑的特性,我们的Android, IOS ...也就只能呵呵了.然而 ...
- salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧
本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...
- Android 在webView中创建web应用(译文)
如果你想在客户端添加一个web应用程序或者仅仅一个web页面,你可以通过使用WebView,WebView是基于android中View的扩展,能够在Activity的layout中实现显示网页,它不 ...
随机推荐
- #Linux学习笔记# Linux文件的属性以及权限说明
1. Linux文件的属性 关于Linux文件的属性的说明和设置请参考鸟哥Linux私房菜:Linux 的文件权限与目录配置 2. 目录和文件的权限意义 在Linux系统中,每个文件都有三种身份的权限 ...
- tmux列表重命名
查看tmux会话列表时,会话名称是数值递增,不易识别 tmux ls 1: 1 windows (created Fri Oct 21 16:29:46 2016) [175x41]2: 1 wind ...
- IndexOf、LastIndexOf、Substring的用法
String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置 ...
- 温故知新---重读C#InDepth(二)
一本好书,或是一本比较有深度的书,就是每次研读的时候都会有新的发现. 好吧,我承认每次读的时候都有泛泛而过的嫌疑~~ 这几年一直专注于C#客户端的开发,逐步从迷迷糊糊,到一知半解,再到自以为是,最后沉 ...
- C# JArray与JObject 的使用 json [{}]
C# JArray与JObject 的使用 STEP1.using Newtonsoft.Json.Linq; STEP2 如何获取json里的某个属性(节点)值,对其删改,新增 //2.1 数组用J ...
- win8 配 jdk
Win8配置jdk 1.7环境变量 环境:win8(32位)64位差不多 jdk1.7 1.右击计算机-属性-高级系统设置-高级-环境变量,弹出“环境变量”对话框,主要是改下面的环 ...
- html 中添加背景音乐
Embed (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版的IE 都支持.u ...
- java 关键字 transient
一个对象实现了Serilizable 接口,该对象就可以被序列化. 然而在实际开发工程中,我们会遇到,这个类的有些属性不需要序列化,比如包含用户的敏感信息(如密码),为了安全起见,不希望在网络操作(主 ...
- ActiveMQ 入门使用实例
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/download-archives.html 2.运行ActiveMQ 解压缩apache-active ...
- 【ZOJ 3502】Contest
题 题意 n个问题,解决的顺序影响正确的概率,无论之前解决的问题是否答对,当前问题 j 答对概率为max{a[i][j]} (i为解决过的问题).求答对题目的最大期望和对应的答题顺序.T组测试,T ( ...