Android中的Webview一些知识点

记性不好,所以记下来^-^

1.获取加载的html的内容:

this.mWebView.addJavascriptInterface(this, "android");

mWebview.loadUrl("javascript:window.android.getSource('<html lang=\"zh-cn\">\\n'+" +
                        "document.getElementsByTagName('html')[0].innerHTML+'\\n</html>');");

@JavascriptInterface
public void getSource(String htmlContent) {
    //这里可以处理获取的html内容(htmlContent)
}

2.与js互相调用

1) android调用JS方法:

不带参数的方法:

mWebView.loadUrl("javascript:loadResource()")

 带参数的方法(注意字符串参数需要用' '包括):

mWebView.loadUrl("javascript:drawLocalStamp('" + stampBase64 + "')");

2)JS调用Android方法:

申明对象(android,可自定义):

this.mWebView.addJavascriptInterface(this, "android");

申明可供调用的Android方法:

 @JavascriptInterface
 public void onHandleMessage(String msg) {
 }

JS调用:

window.android.onHandleMessage(msg);

3.Websetting:对WebView进行配置和管理

缓存设置:

//优先使用缓存: 
WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
     //缓存模式如下:
     //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
     //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
     //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
     //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

//不使用缓存: 
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

离线加载:

if (NetStatusUtil.isConnected(getApplicationContext())) {
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。
} else {
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载
}

webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
webSettings.setDatabaseEnabled(true);   //开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能

String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
webSettings.setAppCachePath(cacheDirPath); //设置  Application Caches 缓存目录,只能设置一次

5.WebViewClient:处理各种通知 & 请求事件

1)shouldOverrideUrlLoading:

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
   view.loadUrl(request.getUrl().toString()); //不会调用系统浏览器,而是在本Webview加载
   return true;   //返回true
}

6.WebChromeClient:辅助 WebView 处理 Javascript 的对话框,网站图标,网站标题等等

1) onProgressChanged

webview.setWebChromeClient(new WebChromeClient(){

      @Override
      public void onProgressChanged(WebView view, int newProgress) {
         //newProgress 加载进度
        }
    });
}

6.net:err_unknown_url_scheme

WebView在应用中还是很常见的,比如我们的注册协议、常见问题等

 @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

        String urlStr = request.getUrl().toString();
        try {
          /*|| url.startsWith("http:") || url.startsWith("https:")*/
          if (urlStr.startsWith("weixin://") || urlStr.startsWith("alipays://") || urlStr.startsWith("tel://")) {
            //类型我目前用到的是微信、支付宝、拨号 三种跳转方式,其他类型自加
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlStr));
            startActivity(intent);
            return true;
          }
        } catch (Exception e) {
          return false;
        }
        view.loadUrl(urlStr);
        return true;

      }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值