接著第一篇,我來繼續(xù)完善我的瀏覽器界面。
1.增加前進(jìn)和返回按鈕
當(dāng)前界面我們?cè)诰W(wǎng)頁里點(diǎn)擊一個(gè)新聞之后,點(diǎn)擊返回,我們會(huì)退出界面。我們希望能回到之前我們?yōu)g覽的界面。
mBackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mWebView.canGoBack()){
mWebView.goBack();
}
}
});
mNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mWebView.canGoForward()){
mWebView.goForward();
}
}
});```
###2.WebSettings的常用設(shè)置
WebSettings setting=mWebView.getSettings();
1.如何將webview中如何控制縮放
```
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
// 這時(shí)候右下角會(huì)顯示一個(gè)縮放的圖標(biāo),去掉圖標(biāo)
settings.setDisplayZoomControls(false);```
2.支持js腳本,一般的網(wǎng)頁都會(huì)有腳本文件。
``` webSettings.setJavaScriptEnabled(true); ```
js就像android和頁面的橋梁,可以讓內(nèi)容運(yùn)行在頁面或者是android應(yīng)用中,js中調(diào)用android中代碼,android也可以調(diào)用頁面中的js代碼。
調(diào)用android代碼:
在JS和Android代碼間綁定一個(gè)新的接口
addJavascriptInterface(java.lang.Object, java.lang.String))
例子:
setting.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new TestJSObject(this), "testJsObject");```
class TestJSObject{
private Context mContext;
public TestJSObject(Context context){
mContext=context;
}
@JavascriptInterface
public void hello(String toast){
Toast.makeText(mContext,toast,Toast.LENGTH_LONG).show();
}
}```
html的內(nèi)容
<html >
<head>
<script type="text/javascript">
//調(diào)用android中中方法
function testAndroidContent(toast){
testJsObject.hello(toast);//看這里的調(diào)用
}
function jsToAndroidContent(){
alert("大家好,我來自js腳本");
}
</script>
</head>
<body>
<button onclick="testAndroidContent('看這里看這里');">點(diǎn)擊顯示android中的方法調(diào)用</button>
</body>
</html>```
android調(diào)用js方法
在webview中定義一個(gè)button
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("javascript:jsToAndroidContent()");
}
});```
3.webview緩存
之前由于項(xiàng)目需要,研究一下webview緩存的相關(guān)信息,發(fā)現(xiàn)在不同手機(jī)不同android系統(tǒng)上的緩存目錄并不相同,獲取默認(rèn)保存過的緩存文件意義不大。我也參考過網(wǎng)上小豬博客的緩存目錄,因?yàn)槟夸洸灰恢?,而且文件類型也無從得知,而且還需要有root權(quán)限,所以后來就沒再研究過。當(dāng)然我們可以使用模擬器看data目錄。
緩存分類:
·頁面緩存:對(duì)整個(gè)頁面的緩存。
·數(shù)據(jù)緩存(針對(duì)頁面的內(nèi)容做緩存appcache,Domstorage)
緩存的模式有三種
- LOAD_CACHE_ONLY: 不使用網(wǎng)絡(luò),只讀取本地緩存數(shù)據(jù)
- LOAD_DEFAULT: 根據(jù)cache-control決定是否從網(wǎng)絡(luò)上取數(shù)據(jù)。
- LOAD_NO_CACHE: 不使用緩存,只從網(wǎng)絡(luò)獲取數(shù)據(jù).
- LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數(shù)據(jù).
開啟緩存開關(guān)
setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);```
然后當(dāng)我們斷網(wǎng)之后,點(diǎn)擊重新加載,依然能看到之前訪問過的網(wǎng)頁。
appCache和domstorage 沒明白,用網(wǎng)上的例子指定路徑后并沒有生成對(duì)應(yīng)的文件夾,說明沒有生成緩存文件。期待明白人給講講。
列一下內(nèi)容
//設(shè)置數(shù)據(jù)庫緩存路徑 mWebView.getSettings().setDatabasePath(cacheDirPath);
//設(shè)置 應(yīng)用 緩存目錄 mWebView.getSettings().setAppCachePath(cacheDirPath);
//開啟 DOM 存儲(chǔ)功能 mWebView.getSettings().setDomStorageEnabled(true);
//開啟 數(shù)據(jù)庫 存儲(chǔ)功能 mWebView.getSettings().setDatabaseEnabled(true);
//開啟 應(yīng)用緩存 功能 mWebView.getSettings().setAppCacheEnabled(true);```
緩存的路徑是在data/data/包名/cache/下,具體里面內(nèi)容不太一樣。
清除緩存,用別人的的總結(jié)。
- setting.setCacheMode(WebSettings.LOAD_NO_CACHE);
- deleteDatabase("WebView.db");deleteDatabase("WebViewCache.db");//因?yàn)橛械木彺鏇]有這種文件,覺得這個(gè)不太靠譜
- webView.clearHistory();
- webView.clearFormData();
- getCacheDir().delete();
- 手動(dòng)寫delete方法,循環(huán)迭代刪除緩存文件夾!
參考地址:
http://www.runoob.com/w3cnote/android-tutorial-webview-cache.html
webview 兩篇總結(jié)完畢。再用再追加吧。