笔记115--app中引入网页(解决网页上Alert不响应的问题)

1、返回键可以返回网页的前一页,而且可以结束当前Activity

public boolean onKeyDown(int keyCode, KeyEvent event){
		if ((keyCode == KeyEvent.KEYCODE_BACK) && 
				mWebView.canGoBack()){
			//返回前一个页面
			mWebView.goBack();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}  

2、解决网页上Alert不响应。原理是捕获网页上Alert,然后自己弹出Android中的Dialog。

try {
			//判断输入的内容是不是网址
			if (URLUtil.isNetworkUrl(url)){  
				//装载网址
				mWebView.loadUrl(url);
			}	
		}catch (Exception e) {
			Log.e("TAG", e.toString());
		}
		
		new Thread(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				super.run();
				//设置支持JavaScript脚本
				WebSettings webSettings = mWebView.getSettings();  
				webSettings.setJavaScriptEnabled(true);
				//设置可以访问文件
				webSettings.setAllowFileAccess(true);
				//设置支持缩放
				webSettings.setBuiltInZoomControls(true);
				Log.e("TAG", "------------2---------------->>>");
				//设置WebViewClient
				mWebView.setWebViewClient(new WebViewClient(){   
					public boolean shouldOverrideUrlLoading(WebView view, String url) {  
						Log.e("TAG", "------------112--------------->>>" + url);
						view.loadUrl(url);
						return true;   
					}  
					@Override
					public void onPageFinished(WebView view, String url) 
					{
						super.onPageFinished(view, url);
					}
					@Override
					public void onPageStarted(WebView view, String url, Bitmap favicon) 
					{
						super.onPageStarted(view, url, favicon);
					}
				});
				//设置WebChromeClient
				Log.e("TAG", "------------3---------------->>>");
				mWebView.setWebChromeClient(new WebChromeClient(){
					@Override
					//处理javascript中的alert
					public boolean onJsAlert(WebView view, String url, String message,
							final JsResult result) 
					{
						//构建一个Builder来显示网页中的对话框
						Builder builder = new Builder(WiwebserverActivity.this);
						builder.setTitle("提示对话框");
						builder.setMessage(message);
						builder.setPositiveButton(android.R.string.ok,
								new AlertDialog.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								//点击确定按钮之后,继续执行网页中的操作
								result.confirm();
							}
						});
						builder.setCancelable(false);
						builder.create();
						builder.show();
						return true;
					};
					@Override
					//处理javascript中的confirm
					public boolean onJsConfirm(WebView view, String url, String message,
							final JsResult result) 
					{
						Builder builder = new Builder(WiwebserverActivity.this);
						builder.setTitle("带选择的对话框");
						builder.setMessage(message);
						builder.setPositiveButton(android.R.string.ok,
								new AlertDialog.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								result.confirm();
							}
						});
						builder.setNegativeButton(android.R.string.cancel,
								new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								result.cancel();
							}
						});
						builder.setCancelable(false);
						builder.create();
						builder.show();
						return true;
					};
					@Override
					//处理javascript中的prompt
					//message为网页中对话框的提示内容
					//defaultValue在没有输入时,默认显示的内容
					public boolean onJsPrompt(WebView view, String url, String message,
							String defaultValue, final JsPromptResult result) {
						//自定义一个带输入的对话框由TextView和EditText构成
						final LayoutInflater factory = LayoutInflater.from(WiwebserverActivity.this);
						final View dialogview = factory.inflate(R.layout.prom_dialog, null);
						//设置TextView对应网页中的提示信息
						((TextView) dialogview.findViewById(R.id.TextView_PROM)).setText(message);
						//设置EditText对应网页中的输入框
						((EditText) dialogview.findViewById(R.id.EditText_PROM)).setText(defaultValue);

						Builder builder = new Builder(WiwebserverActivity.this);
						builder.setTitle("带输入的对话框");
						builder.setView(dialogview);
						builder.setPositiveButton(android.R.string.ok,
								new AlertDialog.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								//点击确定之后,取得输入的值,传给网页处理
								String value = ((EditText) dialogview.findViewById(R.id.EditText_PROM)).getText().toString();
								result.confirm(value);
							}
						});
						builder.setNegativeButton(android.R.string.cancel,
								new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								result.cancel();
							}
						});
						builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
							public void onCancel(DialogInterface dialog) {
								result.cancel();
							}
						});
						builder.show();
						return true;
					};
					@Override
					//设置网页加载的进度条
					public void onProgressChanged(WebView view, int newProgress) 
					{
						WiwebserverActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);
						super.onProgressChanged(view, newProgress);
					}

					@Override
					//设置应用程序的标题title
					public void onReceivedTitle(WebView view, String title) 
					{
						WiwebserverActivity.this.setTitle(title);
						super.onReceivedTitle(view, title);
					}
				});
			}
			
		}.start();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值