當前位置:首頁 » 文件管理 » webview開啟緩存

webview開啟緩存

發布時間: 2023-04-17 00:06:54

A. android 中 webview 怎麼用 localStorage

localStorage sessionStorage 都是HTML5的東西
這些東西和webView沒有什麼關系
webView相當一於一個瀏覽器而已
而localStorage sessionStorage是用js腳本去寫的,只要你設置webView允許執行javascript腳本即可
設置方式:
WebSettings setting = webView.getSettings();
setting.setJavaScriptEnabled(true);//支持js

localStorage sessionStorage用法:
在客戶端存儲數據
HTML5 提供了兩種在客戶端存儲數據的新方法:
localStorage - 沒有時間限制的數據存儲
sessionStorage - 針對一個 session 的數據存儲
之前,這些都是由 cookie 完成的。但是 cookie 不適合大量數據的存儲,因為它們由每個對伺服器的請求來傳遞,這使得 cookie 速度很慢而且效率也不高。
在 HTML5 中,數據不是由每個伺服器請求傳遞的,而是只有在請求時使用數據。它使在不影響網站性能的情況下存儲大量數據成為可能。
對於不同的網站,數據存儲於不同的區域,並且一個網站只能訪問其自身的數據。
HTML5 使用 JavaScript 來存儲和訪問數據。
localStorage 方法
localStorage 方法存儲的數據沒有時間限制。第二天、第二周或下一年之後,數據依然可用。
如何創建和訪問 localStorage:
實例
<script type="text/javascript">
localStorage.lastname="Smith";
document.write(localStorage.lastname);
</script>

下面的例子對用戶訪問頁面的次數進行計數:
實例
<script type="text/javascript">
if (localStorage.pagecount)
{
localStorage.pagecount=Number(localStorage.pagecount) +1;
}
else
{
localStorage.pagecount=1;
}
document.write("Visits "+ localStorage.pagecount + " time(s).");
</script>

sessionStorage 方法
sessionStorage 方法針對一個 session 進行數據存儲。當用戶關閉瀏覽器窗口後,數據會被刪除。
如何創建並訪問一個 sessionStorage:
實例
<script type="text/javascript">
sessionStorage.lastname="Smith";
document.write(sessionStorage.lastname);
</script>

下面的例子對用戶在當前 session 中訪問頁面的次數進行計數:
實例
<script type="text/javascript">
if (sessionStorage.pagecount)
{
sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
}
else
{
sessionStorage.pagecount=1;
}
document.write("Visits "+sessionStorage.pagecount+" time(s) this session.");
</script>

B. 如何設置webview的緩存 ios

首先點擊桌面上的「設置」

接著打開一個叫「Safari」的圖標

其次有兩個「清除歷史數雀喊據和記錄」

然後點擊清除就可以了

其次再告訴大家如何清除QQ里的緩存,進入到QQ界頃判野沖指面,選擇「設置」,點擊「輔助功能」

最後直接清除QQ聊天記錄和圖片就可以了。

C. android 中 webview 怎麼用 localStorage

默認WebView沒梁姿有開啟LocalStorage存儲。
代碼如下:磨讓
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
mWebView.getSettings().setAppCachePath(appCachePath);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
或者是:
wvBrowser.getSettings().setJavaScriptEnabled(true);
// 開啟DOM緩存。
wvBrowser.getSettings().setDomStorageEnabled(true);
wvBrowser.getSettings().setDatabaseEnabled(true);
wvBrowser.getSettings().setDatabasePath(context.getApplicationContext().getCacheDir().getAbsolutePath());
setDatabasePath在瞎渣局API19時已經廢棄,原因是因為在4.4WebView的內核已經換為了Chrome的內核,存儲路徑有WebView控制。

D. 如何有效提升WebView的載入速度

在做混合應用的時候,有幾個痛點,一個是無網路無法使用,還有一個是受網路環境影響的網頁載入速度。今天就這兩個問題,和大家交流一下自己的經驗。
離線緩存
這個比較容易,開啟webView的緩存功能就可以了。
WebSettings settings = webView.getSettings();
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);//開啟DOM緩存,關閉的話H5自身的一些操作是無效的settings.setCacheMode(WebSettings.LOAD_DEFAULT);

這邊我們通過setCacheMode方法來設置WebView的緩存策略,WebSettings.LOAD_DEFAULT是默認的緩存策略,它在緩存可獲取並且沒有過期的情況下載入緩存,否則通過網路獲取資源。這樣的話可以減少頁面的網路請求次數,那我們如何在離線的情況下也能打開頁面呢,這里我們在載入頁面的時候可以通過判斷網路狀態,在無網路的情況下更改webview的緩存策略。
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();if(info.isAvailable())
{
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
}else {
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//不使用網路,只載入緩存}

這樣我們就可以使我們的混合應用在沒有網路的情況下也能使用一部顫遲腔分的功能,不至於什麼都顯示不了了,當然如果我們將緩存做的更好一些,在網路好的時候,比如說在WIFI狀態下,去後台載入一些網頁緩存起來,這樣處理的話,即使在無網路情況下第一次打開某些頁面的時候,也能將該頁面顯示出來。
當然緩存資源後隨之會帶來一個問題,那就是資源無法及時更新,WebSettings.LOAD_DEFAULT中的頁面中的緩茄衫存版本好像不是很起作用,所以我們這邊可能需要自己做一個緩存版本控制。這個緩存版本控制可以放在APP版本更新中。
if (upgrade.cacheControl > cacheControl)
{
webView.clearCache(true);//刪除DOM緩存
VersionUtils.clearCache(mContext.getCacheDir());//刪除APP緩存
try
{
mContext.deleteDatabase("webview.db");//刪除資料庫緩存
mContext.deleteDatabase("webviewCache.db");
} catch (Exception e)
{
}
}

預載入
有時候一個頁面資源比較多,圖片,CSS,js比較多,還引用了JQuery這種龐然巨獸,從載入到頁面渲染完成需要比較長的時間,有一個解決方案是將這些資源打包進APK裡面,然後當頁面載入這些資源的時候讓它從本地獲取,這樣可以提升載入速度也能減少伺服器壓力。重寫WebClient類中的shouldInterceptRequest方法,再將這旦哪個類設置給WebView。
webView.setWebViewClient(new WebViewClient()
{ @Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{ if (url.contains("[tag]"))
{
String localPath = url.replaceFirst("^http.*[tag]\\]", ""); try
{
InputStream is = getApplicationContext().getAssets().open(localPath);
Log.d(TAG, "shouldInterceptRequest: localPath " + localPath);
String mimeType = "text/javascript"; if (localPath.endsWith("css"))
{
mimeType = "text/css";
} return new WebResourceResponse(mimeType, "UTF-8", is);
} catch (Exception e)
{
e.printStackTrace(); return null;
}
} else
{ return null;
}

}
});

這里我們隊頁面中帶有特殊標記的請求進行過濾替換,也就是上面代碼中的[tag],這個可以跟做後台開發的同事約定好來就行了。對圖片資源或者其他資源進行替換也是可以的。補充一個小點可以通過settings.setLoadsImagesAutomatically(true);來設置在頁面裝載完成之後再去載入圖片。
H5優化
Android的OnPageFinished事件會在Javascript腳本執行完成之後才會觸發。如果在頁面中使 用JQuery,會在處理完DOM對象,執行完$(document).ready(function() {});事件自會後才會渲染並顯示頁面。而同樣的頁面在iPhone上卻是載入相當的快,因為iPhone是顯示完頁面才會觸發腳本的執行。所以我們這邊的解決方案延遲JS腳本的載入,這個方面的問題是需要Web前端工程師幫忙優化的,網上應該有比較多LazyLoad插件,這里放一個比較老的鏈接Painless JavaScript lazy loading with LazyLoad,同樣也放上一小段前端代碼,僅供參考。
<script src="/css/j/lazyload-min.js" type="text/javascript"></script><script type="text/javascript" charset="utf-8">
loadComplete() { //instead of document.read();
}
function loadscript() {
LazyLoad.loadOnce([ '/css/j/jquery-1.6.2.min.js', '/css/j/flow/jquery.flow.1.1.min.js', '/css/j/min.js?v=2011100852'
], loadComplete);
}
setTimeout(loadscript,10);</script>

E. android webview載入url怎麼緩存

當我們載入Html時候,會在我們data/應用package下生成database與cache兩個文件夾:

我們請求的Url記錄是保存在webviewCache.db里,而url的內容是保存在webviewCache文件夾下.

WebView中存在著兩種緩存:網頁數據緩存(存儲打開過的頁面及資源)、H5緩存(即AppCache)。


一、網頁緩存


1、緩存構成

/data/data/package_name/cache/

/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db



綜合可以得知 webview 會將我們瀏覽過的網頁url已經網頁文件(css、圖片、js等)保存到資料庫表中


緩存模式(5種)

LOAD_CACHE_ONLY: 不使用網路,只讀取本地緩存數據

LOAD_DEFAULT: 根據cache-control決定是否從網路上取數據。

LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式

LOAD_NO_CACHE: 不使用緩存,只從網路獲取數據.

LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數據。

如:www.taobao.com的cache-control為no-cache,在模式LOAD_DEFAULT下,無論如何都會從網路上取數據,如果沒有網路,就會出現錯誤頁面;在LOAD_CACHE_ELSE_NETWORK模式下,無論是否有網路,只要本地有緩存,都使用緩存。本地沒有緩存時才從網路上獲取。

www.360.com.cn的cache-control為max-age=60,在兩種模式下都使用本地緩存數據。


總結:根據以上兩種模式,建議緩存策略為,判斷是否有網路,有的話,使用LOAD_DEFAULT,無網路時,使用LOAD_CACHE_ELSE_NETWORK。

設置WebView緩存模式

privatevoidinitWebView(){

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//設置緩存模式
//開啟DOMstorageAPI功能
mWebView.getSettings().setDomStorageEnabled(true);
//開啟databasestorageAPI功能
mWebView.getSettings().setDatabaseEnabled(true);
StringcacheDirPath=getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;
//StringcacheDirPath=getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;
Log.i(TAG,"cacheDirPath="+cacheDirPath);
//設置資料庫緩存路徑
mWebView.getSettings().setDatabasePath(cacheDirPath);
//設置ApplicationCaches緩存目錄
mWebView.getSettings().setAppCachePath(cacheDirPath);
//開啟ApplicationCaches功能
mWebView.getSettings().setAppCacheEnabled(true);
}
清除緩存

/**
*清除WebView緩存
*/
publicvoidclearWebViewCache(){

//清理Webview緩存資料庫
try{
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
}catch(Exceptione){
e.printStackTrace();
}

//WebView緩存文件
FileappCacheDir=newFile(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
Log.e(TAG,"appCacheDirpath="+appCacheDir.getAbsolutePath());

FilewebviewCacheDir=newFile(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG,"webviewCacheDirpath="+webviewCacheDir.getAbsolutePath());

//刪除webview緩存目錄
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//刪除webview緩存緩存目錄
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}

F. 小米4c里android system webview可以刪除嗎

不能刪除,這是系統的瀏覽器內核。

一、Android system webview是什麼?

1、安卓App中用於顯示網頁內容的組件,更不更新無所謂別卸載了就行。

2、它是Chrome看視頻以及一些視覺元素會用到,有人反應更新後chrome沒法看視頻了,所以升不升級無所謂。但千萬別刪,這個程序刪除以後手機上的瀏覽器打開就會停止。

二、Android system webview的性能優化有哪些?

1.頁面載入速度優化。

影響頁面載入速度的因素有非常多,在對 WebView 載入一個網頁的過程進行調試發現,每次載入的過程中都會有較多的網路請求,除了 web 頁面自身的 URL 請求,還會有 web 頁面外部引用的JS、CSS、字體、圖片等等都是個獨立的 http 請求。這些請求都是串列的,這些請求加上瀏覽器的解析、渲染時間就會導致 WebView 整體載入時間變長,消耗的流量也對應的真多。

2.選擇合適的 WebView 緩存。

WebView 緩存看似就是開啟幾個開關的問題,但是要弄懂這幾種緩存機制還是很有深度。下圖是騰訊某工程師總結六種 H5 常用的緩存機制的優勢及適用場景。

G. iOS的webView如何實現html的離線緩存

方法一:離線獲取獲取到html代碼。html代碼你可以把他理解成是一個很長的字元串。通過正則表達式把這個html頁面里的所有img標簽url。如果是相對url,就加上host。如果是絕對url,就直接下載。這樣這個頁面里的所有圖片路徑都拿到了。
方法一的獲取img標簽url的正則表達式:
NSString *urlPattern = @"<img[^>]+?src=[\"']?([^>'\"]+)[\"']?";

方法二:通過webview和js 本地程序的交換,獲取到html頁面所有圖片下載地址。
webview和本地程序交互的方法是_detailWebView 。

H. android webview為什麼無法緩存

androd webview是支持緩存的,看看你的開關有沒有打開:
WebView中存在著兩種緩存:網頁數據緩存(存儲打開過的頁面及資源)、H5緩存(即AppCache)。

一、網頁緩存
1、緩存構成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

WebView緩存文件結構如下圖所示

I. Android:最全面的 Webview 詳解

WebView是一個基於webkit引擎、展現web頁面的控制項。

一般來說Webview可單獨使用,可聯合其子類一起使用,所以接下來,我會介紹:

常見用法:Back鍵控制網頁後退

配置步驟1:添加訪問網路許可權 (AndroidManifest.xml)

配置步驟2:生成一個WebView組件(有兩種方式)

配置步驟3:進行配置-利用WebSettings子類 (常見方法)

常見用法:設置WebView緩存

注意: 每個 Application 只調用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()

常見方法1:shouldOverrideUrlLoading()

常見方法2:onPageStarted()

常見方法3:onPageFinished()

常見方法4:onLoadResource()

常見方法5:onReceivedError()

常見方法6:onReceivedSslError()

常見方法1: onProgressChanged()

常見方法2: onReceivedTitle()

具體請看我寫的文章 Android WebView與JS的交互方式 最全面匯總

3.4.1 不在xml中定義 Webview ,而是在需要的時候在Activity中創建,並且Context使用 getApplicationgContext()

3.4.2 在 Activity 銷毀( WebView )的時候,先讓 WebView 載入null內容,然後移除 WebView,再銷毀 WebView,最後置空。

步驟1:添加訪問網路許可權

AndroidManifest.xml

步驟2:主布局
activity_main.xml

步驟3:根據需要實現的功能從而使用相應的子類及其方法(注釋很清楚了)
MainActivity.java

J. qwebview默認是不緩存的嗎,如何給qwebview增加緩存

1. 需要給 QWebSettings 設置屬性 QWebSettings::LocalStorageEnabled 為 true
2. 調用 QWebSettings 的 enablePersistentStorage 方法。
這個方法會同時開啟很多設置:
This method will simultaneously set and enable the iconDatabasePath(), localStoragePath(), offlineStoragePath() and ().

示例代碼:
webView->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
webView->settings()->enablePersistentStorage(QDir::homePath());

其他的設置,如 setOfflineStorageDefaultQuota 都是可選的。

熱點內容
安卓如何下載lv手游 發布:2025-05-14 10:35:45 瀏覽:383
pythondict添加key 發布:2025-05-14 10:33:59 瀏覽:381
柱子箍筋加密區長度 發布:2025-05-14 10:18:29 瀏覽:352
雲伺服器和內網穿透哪個好 發布:2025-05-14 10:16:41 瀏覽:627
安徽新能源網路配置是什麼 發布:2025-05-14 10:06:24 瀏覽:631
pinode搭建伺服器 發布:2025-05-14 10:04:23 瀏覽:4
電腦伺服器ip名稱 發布:2025-05-14 10:01:09 瀏覽:749
connectorpython 發布:2025-05-14 09:48:50 瀏覽:763
配置不好怎麼辦 發布:2025-05-14 09:46:40 瀏覽:623
數據流程圖中的數據存儲是指 發布:2025-05-14 09:46:39 瀏覽:446