1.3、 WebView的ajax或javascript响应

本文介绍如何在Android应用中配置和使用WebView,包括启用JavaScript支持、调试设置、隐藏滚动条及处理Ajax弹窗等技巧,并提供了WebView资源释放的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设置支持javaScript

WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);

2.webview相关设置

查bug设置

wv.setWebContentsDebuggingEnabled(true);

去除右侧滚动条

亲测有效:  android:scrollbars="none"

无效:

//去除滚动条

mWebView.setHorizontalScrollBarEnabled(false);//水平不显示

mWebView.setVerticalScrollBarEnabled(false); //垂直不显示

 

3. WebView支持ajax弹框

wv.setWebChromeClient(new WebChromeClient() {
                                 
// 拦截输入框(原理同方式2)
                                  // 参数message:代表promt()的内容(不是url)
                                  // 参数result:代表输入框的返回值
                                  @Override
                                 
public boolean onJsPrompt(WebViewview, String url, String message, StringdefaultValue, 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 DialogInterface.OnClickListener() {
                                                 
public void onClick(DialogInterface dialog, int which){
                                                     
wv.loadUrl(url1, map);
 
                                                    result.confirm(et.getText().toString());

                                                 
}

                                             
})
                                             .setNeutralButton("取消", new DialogInterface.OnClickListener(){
                                                 
public void onClick(DialogInterface dialog, int which){
                                                     
result.cancel();
                          
                       }
                                             
});

                                     
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
                                      builder.setOnKeyListener(new DialogInterface.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();
                                     
dialog.getWindow().setLayout((int) dip2px(400), LinearLayout.LayoutParams.WRAP_CONTENT);
   
                                  return true;
                                      // return super.onJsPrompt(view, url, message,defaultValue,
                                     
//result);

                                  }

                                  // 通过alert()和confirm()拦截的原理相同,此处不作过多讲述

                                  // 拦截JS的警告框
                                  @Override
                                 
public boolean onJsAlert(WebViewview, String url, String message, JsResultresult) {
                           
          final AlertDialog.Builderbuilder = new AlertDialog.Builder(view.getContext());

                                     
builder.setTitle("").setMessage(message).setPositiveButton("确定",null);

                                     
// 不需要绑定按键事件
  
                                   // 屏蔽keycode等于84之类的按键
                                      builder.setOnKeyListener(new DialogInterface.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();
                                     
dialog.getWindow().setLayout((int) dip2px(400), LinearLayout.LayoutParams.WRAP_CONTENT);
                                     
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
                                      return true;
                                     
// return super.onJsAlert(view, url, message,result);

                                 
}

                                 
// 拦截JS的确认框
                                  @Override
    
                             public boolean onJsConfirm(WebViewview, String url, String message, final JsResultresult) {
                                     
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
              
                       builder.setTitle("")
                                             
.setMessage(message)
                                             .setPositiveButton("确定", new DialogInterface.OnClickListener(){
                                 
                public void onClick(DialogInterfacedialog, int which) {
                                                     
wv.loadUrl(url1, map);
                                                     
result.confirm();
                                 
                }
                                             
})
                                             .setNeutralButton("取消", new DialogInterface.OnClickListener(){
                                                 
public void onClick(DialogInterface dialog, int which){
                                                     
result.cancel();
                                                 
}
                                             
});
                                     
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                                         
@Override
                                         
public void onCancel(DialogInterface dialog) {
                                             
result.cancel();
                                         
}
                                     
});

                                     
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
                                      builder.setOnKeyListener(new DialogInterface.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();
                                     
dialog.getWindow().setLayout((int) dip2px(400), LinearLayout.LayoutParams.WRAP_CONTENT);
                                     
return true;
                                      // return super.onJsConfirm(view, url,message, result);

                                 
}
             
                }
        );

4. webView释放

@Override
protected void onDestroy() {
   
super.onDestroy();
   
wv.removeAllViews();
   
wv.destroy();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值