文档章节

WebView中捕获JavaScript事件

Cundong
 Cundong
发布于 2013/09/13 11:48
字数 315
阅读 11517
收藏 81

前几天,在项目中遇到一个BUG:

我们在Android工程中使用了WebView,打开一个网银支付url,点击支付的时候,他们会在网页中使用js弹出一个询问框,js代码如下:

function testConfirm() { 
    if(confirm("pay or not?")) { 
      alert("yes! i do"); 
    } 
    else
    { 
      alert("no!!!"); 
    } 
}

我在webView没有对js这个事件进行处理,就导致流程不能正确执行下去了。

查了一下api,最后是这样解决了:

首先,设置webView属性:

mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

其次,设置WebChromeClient:

mWebView.setWebChromeClient(new WebChromeClient() {

			@Override
			public boolean onJsAlert(WebView view, String url, String message,
					final JsResult result) {
				AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
				builder.setMessage(message)
						.setNeutralButton("确定", new OnClickListener() {
							@Override
							public void onClick(DialogInterface arg0, int arg1) {
								arg0.dismiss();
							}
						}).show();
				result.cancel();
				return true;
			}

			@Override
			public boolean onJsConfirm(WebView view, String url,
					String message, final JsResult result) {
				// TODO Auto-generated method stub
				Log.i(TAG, "onJsConfirm" + "," + "url: " + url);

				DialogUtils.dialogBuilder(mContext, "温馨提示", message,
						new DialogCallBack() {

							@Override
							public void onCompate() {
								Log.i(TAG, "onJsConfirm,onCompate");
								result.confirm();
							}

							@Override
							public void onCancel() {
								Log.i(TAG, "onJsConfirm,onCancel");
								result.cancel();
							}
						});
				return true;
			}
		});

如此,webView中就可以捕获javascript的alert()、confirm()事件了。

测试用的HTML页面代码:

<html>
	<head>
		<title>cundong's test</title>
        <script type="text/javascript">
            function testAlert(){
            	alert("Hello! I am an alert box!");
            }
            
            function testConfirm(){
            	if(confirm("pay or not?"))
                {
                    alert("yes! i do");
                }
                else
                {
                    alert("no!!!");
                }
            }
        </script>
	</head>
	<body>
        
        <button id="testalert" onClick="testAlert();">test alert</button>
        <br/>
        <button id="testconfirm" onClick="testConfirm();">test confirm</button>
	</body>
</html>

© 著作权归作者所有

Cundong
粉丝 186
博文 28
码字总数 30973
作品 0
海淀
私信 提问
加载中

评论(3)

乌鸦哥
乌鸦哥
good
sjack
sjack
it is good.
hillshills
hillshills
学习了。
iOS WebView 拦截Ajax请求

desc: 利用iOS WebView 注入js 拦截Ajax请求 iOS拦截WebView Request 请求 相信大家都不陌生,这个在WebView delegate里有实现 贴一段代码 ture or false 来决定WebView 是否加载请求。 可以...

HeroHY
2017/05/24
606
0
Android三种Webview获取Javascript返回值/属性方式

1.通过反射(各版本API,不一样),如下为4.2.2源码的方式:通过android.webkit.WebViewClassic的fromWebView拿到webview对应的WebViewClassic实例1,通过该实例1的getWebViewCore方法拿到对...

蔻之
2013/11/25
4.2K
0
android webview 支持按键响应

用webView显示一个网页(无链接,在js中捕获按键键值,当按某个键时重定向到另一个页面)时,有设置支持javaScript,但是按键(键值和js中捕获的一致)后,页面无任何响应。 求有做个这个web...

blackylin
2013/06/27
1K
1
webview加载jsp页面与js函数调用

手机端用webview发送一个后台请求: String url = getString(R.string.request_url)+"/hopetest/serviceitem/list_mobile.do? fund_webview.loadUrl(url); 请求完成后转向一个jsp页面。 正常......

卷心菜tt
2014/12/20
2.2K
1
捕获javascript中的alert事件

来源google开源项目 http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/ 我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对andro...

长平狐
2012/10/09
397
0

没有更多内容

加载失败,请刷新页面

加载更多

JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
21分钟前
4
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
27分钟前
5
0
析构函数是否必须为虚函数?为何?

在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易造成...

天王盖地虎626
27分钟前
4
0
【TencentOS tiny】深度源码分析(7)——事件

引言 大家在裸机编程中很可能经常用到flag这种变量,用来标志一下某个事件的发生,然后在循环中判断这些标志是否发生,如果是等待多个事件的话,还可能会if((xxx_flag)&&(xxx_flag))这样子做...

杰杰1号
31分钟前
6
0
聊聊nacos client的ServerHttpAgent

序 本文主要研究一下nacos client的ServerHttpAgent HttpAgent nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/http/HttpAgent.java public interface HttpAgent { ......

go4it
37分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部