参考:https://www.jianshu.com/p/fd61e8f4049e
内核版本比较:https://www.cnblogs.com/gcczhongduan/p/4237959.html
x5 和 原生 比较:https://www.jianshu.com/p/d27f3379a4b7
https://www.jianshu.com/p/3c94ae673e2a
https://www.jianshu.com/p/52ec85259ccc
webView.goBack();//跳到上个页面
webView.goForward();//跳到下个页面
webView.canGoBack();//是否可以跳到上一页(如果返回false,说明已经是第一页)
webView.canGoForward();//是否可以跳到下一页(如果返回false,说明已经是最后一页)
问题:在不做任何处理前提下 ,浏览网页时点击系统的「 Back 」键,整个 Browser 会调用 finish()而结束自身
目标:点击返回后,是网页回退而不是推出浏览器
解决方案:在当前 Activity 中处理并消费掉该 Back 事件
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
//优先使用缓存:
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);
//清除网页访问留下的缓存
//由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
webView.clearCache(true);
//清除当前webview访问的历史记录
//只会webview访问历史记录里的所有记录除了当前访问记录
webView.clearHistory();
//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
webView.clearFormData();
另外一种方式:
//删除缓存文件夹
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete();
}
file.delete();
}
//删除缓存数据库
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");
代码
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
String cookie = "name=xxx;age=18";
cookieManager.setCookie(URL, cookie);
CookieSyncManager.getInstance().sync();
code:
CookieManager cookieManager = CookieManager.getInstance();
String cookie = cookieManager.getCookie(URL);
code
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
CookieSyncManager.getInstance().sync();
code
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);//开启JavaScript
mWebView.loadUrl("file:///android_asset/keithxiaoy.html");//加载本地网页
mWebView.setWebChromeClient(new WebChromeClient());//此行代码可以保证JavaScript的Alert弹窗正常弹出
//核心方法, 用于处理JavaScript被执行后的回调
mWebView.addJavascriptInterface(new JsCallback() {
@JavascriptInterface//注意:此处一定要加该注解,否则在4.1+系统上运行失败
@Override
public void onJsCallback() {
System.out.println("JavaScript调用Android啦");
}
}, "keithxiaoy");//参1是回调接口的实现;参2是JavaScript回调对象的名称
//定义回调接口
public interface JsCallback {
public void onJsCallback();
}
code
//直接使用webview加载js就可以了
mWebView.loadUrl("javascript:wave()");
code
![](android_normal.png)
Click me!