webview笔记

1. 用户上传文件

webChromeClient的onShowFileChooser这个方法,这将打开一个文件选择器,如果要取消这个请求则是调用filePathCallback.onReceiveValue(null)

2. webView调用JS方法

webView调用Js的基本格式是loadurl("JavaScript:method(参数)");

但是如果调用的js方法有值返回,则是如下写法:  // 就是调用evaluateJavaScript方法回调

private void evaluateJavaScript(WebView webview){ 

  webview.evaluateJavaScript("js方法名()",new ValueCallback<String>(){

    @Override

    public void onReceiveValue(String s)

      Log.e("",s);

  });

}

 

3. JS调用webView的方法

Java方法使用JavascriptInterface注解

@JavascriptInterface

public void show(string hello){

  Toast.makeText().show();

}

注册JavaScriptInterface

webView.addJavaScriptInterface(this,"android");// 这里是做了一个映射,映射到JavaScript的android对象中

JavaScript调用android 方法 弹出对话框

function getFromAndroid(){

  window.android.show("hello");

}

 

如果是调用的android 方法有返回值,则在最后调用的JavaScript处接收值就行了,var result = window.android.method(参数);

 

3. webView加载优化:

第一种方式尽量使一些资源本地化,因为最快的方式还是从本地读取资源。本地资源放在asset路径下,然后重写webviewClient的webResourceResponseShouldInterceptRequest(Webview webview,WebResourceRequest request)读取本地资源,建立cache controller机制,定期检查资源更新,保证本地资源是最细可用的。

第二种方式就是缓存,首先在websetting里面把相关的缓存设置打开,setAppCacheEnab(),setDomstroageEnable(),setDatabaseEnable(),最重要的设置缓存模式,setCacheModel();

因为不同的网络环境,我们要选择不同的缓存模式,默认情况下是websettings.LOAD_DEFAULT, 所以如果是网络好的情况下使用默认的方式,网络有问题是只能使用缓存的页面LOAD_CATCH_ONLY, 所以这里就要定期接受服务器通知更新缓存

第三种方式,就是前端要做的了,对JS做延迟加载。

 

posted @ 2016-09-02 08:50  heavenliu  阅读(202)  评论(0编辑  收藏  举报