记性不好,所以记下来^-^
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;
}