android webview获取js中的alert、confirm、和prompt,以及获取其值

说明:

开发中遇到一个需要通过prompt来传值的情况。也就是通过捕获prompt弹出框的值,来显示在原生中,但是不弹出prompt框。

代码:

第一步:原生调用js代码

 

private WebView webView;
webView.loadUrl("javascript:getParams()");
 

 

第二部:网页js弹框

 

function getParams() {
	window.prompt("测试");
}
 

 

第三部:原生拦截弹框,禁止弹框并且得到对应的值

 

private void init webView() {	
		webView = new WebView(context);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);//允许网页使用js
        webView.setWebChromeClient(new WebChromeClient() {//允许有alert弹出框
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                webTitle = title;
            }

            /**     
			 * 处理alert弹出框     
			 */       
			@Override       
			public boolean onJsAlert(WebView view,String url,        
									 String message,JsResult result) {        
				Log.d(LOG_TAG,"onJsAlert:"+message);        
			  //  mReusultText.setText("Alert:"+message);        
			  /*  //对alert的简单封装       
				new AlertDialog.Builder(PhoneTest.this).       
					setTitle("Alert").setMessage(message).setPositiveButton("OK",       
					new DialogInterface.OnClickListener() {       
						@Override      
						public void onClick(DialogInterface arg0, int arg1) {       
						   //TODO       
					   }       
				}).create().show();       
				*/  
				result.confirm();        
				return super.onJsConfirm(view,url,message, result);        
			}        
		   
			/**     
			 * 处理confirm弹出框     
			 */       
			@Override       
			public boolean onJsConfirm(WebView view, String url, String message,        
					JsResult result) {        
				Log.d(LOG_TAG, "onJsConfirm:"+message);        
				mReusultText.setText("Confirm:"+message); //捕获弹框消息给原生赋值,相当于传值了 
				//对confirm的简单封装        
				new AlertDialog.Builder(PhoneTest.this).        
					setTitle("Confirm").setMessage(message).setPositiveButton("OK",        
					new DialogInterface.OnClickListener() {        
						@Override       
						public void onClick(DialogInterface arg0, int arg1) {        
						   //TODO        
					   }        
				}).create().show();    
				result.confirm();        
				return true;  
				//如果采用下面的代码会另外再弹出个消息框,目前不知道原理  
				//return super.onJsConfirm(view, url, message, result);        
			}        
		   
			/**     
			 * 处理prompt弹出框     
			 */       
			@Override       
			public boolean onJsPrompt(WebView view, String url, String message,        
					String defaultValue, JsPromptResult result) {        
				Log.d(LOG_TAG,"onJsPrompt:"+message);        
				mReusultText.setText("Prompt input is :"+message);        
				result.confirm();        
				return super.onJsPrompt(view, url, message, message, result);        
			}        
    
		});
}    
 

 

注释:

result.confirm() 和 return true 一起用,才能保证弹框不会出现。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beluga_白鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值