WebView与js交互用法与注意


前段时间做的项目涉及到WebView与js交互,当是有些困惑,不过还是解决了:


一、WebView 基本用法

      1.首先不要忘记在清单文件下添加网络权限:

       <uses-permission android:name="android.permission.INTERNET" />

2.在布局中添加WebView

只需使用标签<WebView></WebView>标签即可,如下:

  <WebView
    android:id="@+id/mWebView"
    android:layout_width="match_parent"
    android:layout_height="400dp" />
   3.在代码中使用
 
   WebView mWebView = (WebView) findViewById(R.id.mWebView);
   mWebView.loadUrl("http://www.baidu.com");
 
二、WebView与js交互 
    1.我们需要使用一个类 WebSettings
      在代码中构建:WebSettings settings = mWebView.getSettings();
    
    2.与js交互就要设置 支持相关属性,以下是一些常用的设置:
      settings.setJavaScriptEnabled(true);//设置支持js
      settings.setJavaScriptCanOpenWindowsAutomatically(true);//设置js能直接打开窗口
      settings.setDefaultTextEncodingName("utf-8");//设置编码格式  
      settings.setBuiltInZoomControls(true);//设置支持缩放
      settings.setUseWideViewPort(true);//适配屏幕,可以任意比例缩放
      settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
      settings.setAppCacheEnabled(true);//设置使用缓存
    
    3.与js进行交互要定义一个类似于协议的东西:例如我们定义为:forAndroid 
 
    3.1我们需要写一个用于提供js调用Android方法的类,暂命名:JavaScriptObject
      
     public class JavaScriptObject {
         //写了一个方法让js调用
         //在高版本中要添加引用js      
         @JavascriptInterface

         
public void FromAndroid(String string) {
          //处理相关逻辑代码...
         }
      }
     //设置本地调用对象及其接口,填写定义的协议:forAndroid
      mWebView.addJavascriptInterface(new JavaScriptObject(MainActivity.this),"forAndroid");
      //载入网页
      mWebView.loadUrl(UrlPath.main_web);

     3.2 js已经调用了Android的方法,下面是Android 调用js
     例如Html页面中的js方法为:positionPoint(string)  参数为一个字符串,传参的时候需要注意添加引号,调用如下:
      mWebView.loadUrl("javascript:positionPoint('"+ "我是一个字符串"+"')");


    前方高能---》开发过程中存在Android 调用不到js的问题,原因是js在运行之前需要有一个documen的对象,所以我们在加载的时候需要load一                  个空白页。如果loda空白页的时候没有执行完Html,里面的方法就不走。所以如果想在原生中调用js的方法,让js的document对象                  生成有一下几种方法:
                  1.使用按钮点击调用js
                  2.使用延时调用
                  3.在页面加载完调用
         按照需求和实际开发情况选取:个人一般会使用第三种方式:
         mWebView.setWebViewClient(new MyWewViewClient());
         //创建一个类继承 WebViewClient,重写onPageFinished()方法
         class MyWewViewClient extends WebViewClient{
                @Override
              public void onPageFinished(WebView view, String url) {
                   super.onPageFinished(view, url);
    
                  main_webview.loadUrl("javascript:positionPoint('"+ "我是一个字符串"+"')");
                }
         }
         这样的话在Html加载完成后调用js就行了

三、其他用法:
 1有时候WebView加载Html时,需要跳转网页,默认是使用手机浏览器打开,我们需要跳转依然在当前WebView  
 
mWebView
.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
2.按下返回键是,不是退出程序,而是返回上一级页面
public boolean onKeyDown(int keyCode, KeyEvent event) {       
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
            mWebView.goBack();       
            return true;       
        }       
        return super.onKeyDown(keyCode, event);       
    }

 3.最后再添加一个网页加载过程
  
 mWebView.setWebChromeClient(new WebChromeClient(){
    public void onProgressChange(WebView view,int newProgress){
     super.onProgressChanged(view,newProgress);
     if(newProgress==100){
        Log.i("tag","网页加载完成了");
     }else{
          Log.i("tag","网页加载中...");
      }
    }
 });

好了,关于WebView的知识就介绍到这了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值