WebView 踩坑集锦

1.webview 与javascript进行交互 :

①在和H5交互时,实例名称例如:“android”应该尽量避免javascript中的关键字,例如;window,history等等,可能会出现无法识别现象

targetSdkVersion 大于17时需要在JavaScript实例对象中的函数加上@JavascriptInterface注解,否则会找不到函数,无法交互



webView.addJavascriptInterface(new JsAObjInterFace(){

@JavascriptInterface

public void Test(){}

},"android");

③webView.setWebViewClient(new WebViewClient()
  {  
   @Override
   public void onPageFinished(WebView view, String url) {
    // TODO Auto-generated method stub

   }
   @Override
   public void onPageStarted(WebView view, String url, Bitmap favicon) {
    // TODO Auto-generated method stub
   }
   @Override
   public void onReceivedError(WebView view, int errorCode,
     String description, String failingUrl) {
    // TODO Auto-generated method stub
    isError=true;
   }
  });监听中onPageFinished()在Android4.4上会调用两次,如果需要自己处理加载失败特殊显示等操作时,为了适配问题,尽量不要在此函数中进行逻辑处理

可在

webView.setWebChromeClient(new WebChromeClient() {

   @Override
   public boolean onJsAlert(WebView view, String url, String message,
     JsResult result) {
    // TODO Auto-generated method stub
    result.confirm();       
    return super.onJsConfirm(view,url,message, result);    

   }
   //
   @Override
   public boolean onJsConfirm(WebView view, String url,
     String message, JsResult result) {
    // TODO Auto-generated method stub

result.confirm();    
    return true;
   }
   @Override
   public void onProgressChanged(WebView view, int newProgress) {
    super.onProgressChanged(view, newProgress);
    
     if (newProgress == 100) {


      // 网页加载完成
     if(isError==true){
      
     }else{
     
     }
    } else {
     // 加载中
     
    }
   }

  });处理,当webview加载网页中还有对话框和确认框时,需要做出回应,防止二次加载出现空白问题,但是Android6.0系统中newProgress=100也会调用两次,所有iserror应该在webview重加载过程中设置为false,就可解决了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值