html5禁止頁面緩存
A. 如何不讓html5 app cache的manifest緩存當前頁面
anifest的目的是離線運行,如果宿主html文件不被manifest自動緩存的話,整個離線運行最基本的html都跑不起來。
實在要用manifest,就將宿主html文件也添加進manifest清單中,然後在每次偵測到清單內容更新完畢後,提示用戶並reload一次頁面就好了。
B. html5嵌入到app中,緩存如何去掉
Android的話可以使用webview緩存設置
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
這樣webView就不會去載入緩存了,或者,每次退出時手動刪除webView緩存,應用databases目錄下有兩個we
C. HTML5應用程序緩存Application Cache詳解
什麼是Application Cache
HTML5引入了應用程序緩存技術,意味著web應用可進行緩存,並在沒有網路的情況下使用,通過創建cache manifest文件,可以輕松的創建離線應用。
Application Cache帶來的三個優勢是:
① 離線瀏覽
② 提升頁面載入速度
③ 降低伺服器壓力
而且主要瀏覽器皆以支持Application Cache,就算不支持也不會對程序造成什麼影響
離線存儲技術
HTML5提出了兩大離線存儲技術:localstorage與Application Cache,兩者各有應用場景;傳統還有離線存儲技術為Cookie。
經過實踐我們任務localstorage應該存儲一些非關鍵性ajax數據,做錦上添花的事情;
Application Cache用於存儲靜態資源,緩銀仍然是干錦上添花的事情;
而cookie只能保存一小段文本(4096位元組);所以不能存儲大數據,這是cookie與上述緩存技術的差異之一,而因為HTTP是無狀態的,伺服器為了區分請求是否來源於同一個伺服器,需要一個標識字元串,而這個任務就是cookie完成的,這一段文本每次都會在伺服器與瀏覽器之間傳遞,以驗證用戶的許可權。
所以Application Cache的應用場景不一樣,所以使用也不一致。
Application Cache簡介
Application Cache的使用要做兩方面的工作:
① 伺服器端需要維護一個manifest清單
② 瀏覽器上只需要一個簡單的設置即可
#p#副標題#e#
以例子做說明:
CACHE MANIFEST
CACHE:
# 需要緩存的列表
style1.css
1.jpg
01.js
NETWORK:
# 不需要緩存的
4.jpg
FALLBACK:
# 訪問緩存失敗後,備用訪問的資源,第一個是訪問源,第二個是替換文件*.html /offline.html
2.jpg/3.jpg
復制代碼
首先我這里報了一個錯:
Application Cache Error event: Manifest fetch failed (404)
這個錯誤的原因是:manifest 文件需要配置正確的 MIME-type,即 「text/cache-manifest」。必須在 web 伺服器上進行配置,不同的伺服器不一樣
APPLICATIONCACHE
01.js
02.js
1.jpg
2.jpg
3.jpg
4.jpg
demo.appcache
index.html
style1.css
style2.css
web.config
zepto.js
這樣一來便可以離線應用了,這個時候就算斷網了,那些文件依舊能訪問
這里有一點值得注意,比如這里不帶/index.html他會將「applicationcache/」緩存,其實這個就是index.html
manifest 文件可薯哪槐分為三個部分:
CACHE MANIFEST - 在此標題下列出的文件將在首次下載後進行緩存
NETWORK - 在此標題下列出的文件需要與伺服器的連數友接,且不會被緩存
FALLBACK - 在此標題下列出的文件規定當頁面無法訪問時的回退頁面(比如 404 頁面)
如圖所示,HTML5定義了幾個事件點,但是我們一般不會主動使用js去操作什麼,大多數情況下,我們完全依賴瀏覽器的處理即可。
#p#副標題#e#
尺寸限制
Application Cache的尺寸限制統一在5M,我這里做一個測試:
如所示,兩個css文件依舊超過了5M這個時候
Document was loaded from Application Cache with manifest
index.html:1 Application Cache Checking event
index.html:6 GET
index.html:1 Application Cache NoUpdate event
index.html:11 GET
index.html:12 GET
如所示,style2已經不能緩存了,這個會造成什麼問題呢?
比如我A頻道維護了自己的Application Cache,B頻道也維護了自己的,這個時候A頻道如果使用達到了一個峰值,會導致B頻道所有的緩存失效,所以:
建議Application Cache,存儲公共資源,不要存儲業務資源
一些問題
由更新機制來說,首次更新manifest時,因為頁面載入已經開始甚至已經完成,緩存更新尚未完成,瀏覽器仍然會使用過期的資源;瀏覽器是當Application Cache有更新時,該次不會使用新資源,第二次才會使用。這個時候update事件中執行window.reload事件。
window.applicationCache.addEventListener(updateready, function(){
window.location.reload()
});
由上例可以知道,緩存的不只是顯示定義的文件,比如上例中的applicationcache/時便會默認保存index.html為映射的數據,並且包含demo.appcache文件,很多時候會遇到一次文件更新線上老是不更新,這個時候隨便在manifest配置文件中做一點修改即可更新。
從可用性與易用性來說,Application Cache是值得使用的,但是最好是做靜態資源的緩存,真正要實現離線應用還得花更多的功夫呢!
D. 如何不讓html5 app cache的manifest緩存當前頁面
這應該跟每個瀏覽器的版本實現機制有關系。
chrome 版本 31.0.1650.63
測試結果:如果把js放在index.html的body底部,那麼就可以實現clock.js的app cache,但是clock.css是不行的。
ff 版本 28.0
測試結果:只能實現cache.html本身的緩存。
所以目前看來當初的這種HACK機制,只是在某個瀏覽器的某個版本支持。類似的問題的答案在stackoverflow上也有。不過,在用APP CACHE開始之前,還是要三思為何要用。APP CACHE 的提出是為了打造離線應用,也就是說離線後,應用可以通過依賴本地緩存文件達到正常使用。
如果說非要不緩存當前頁面,目前看起來只能通過AJAX來動態載入頁面的動態內容來解決了。
E. html5新增了離線緩存機制這說法對嗎
這個不算是 新增吧。
隨著現代瀏覽器的推動,Flash放棄對移動端的支持,HTML5無疑成為當前Web前端炙手可熱的話題。各大游戲開發商、App開發商紛紛投入人力進行研究和技術儲備。相信不久的將來,HTML5會迎來一個快速發展和普及的春天。那麼,HTML5這個新一代的標准,又給我們帶來哪些緩存機制呢?
HTML5 之離線應用Manifest
我們知道,使用傳統的技術,就算是對站點的資源都實施了比較好的緩存策略,但是在斷網的情況下,是無法訪問的,因為入口的HTML頁面我們一般運維的考慮,不會對其進行緩存。HTML5的Cache Mainifest離線應用特性就能夠幫助我們構建離線也能使用的站點,所有的資源都使用瀏覽器本地緩存,當然前提是要求在聯網的情形下使用過一次站點。
如何實現離線訪問特性
實現的步驟非常簡單,主要3個步驟:
1)在伺服器上添加MIME TYPE支,讓伺服器能夠識別manifest後綴的文件
AddType text/cache-manifest manifest
2)創建一個後綴名為.manifest的文件,把需要緩存的文件按格式寫在裡面,並用注釋行標注版本
CACHE MANIFEST
# 直接緩存的文件
CACHE:
Path/to/cache.js
# version:2012-03-20
3)給 <html> 標簽加 manifest 屬性,並引用manifest文件
具體可以參考:HTML5 緩存: cache manifest
<html manifest=」path/to/name-of.manifest」>
離線應用訪問及更新流程
第一次訪問離線應用的入口頁HTML(引用了manifest文件),正常發送請求,獲取manifest文件並在本地緩存,陸續拉取manifest中的需要緩存的文件
再次訪問時,無法在線離線與否,都會直接從緩存中獲取入口頁HTML和其他緩存的文件進行展示。如果此時在線,瀏覽器會發送請求到伺服器請求manifest文件,並與第一次訪問的副本進行比對,如果發現版本不一致,會陸續發送請求重新拉取入口文件HTML和需要緩存的文件並更新本地緩存副本
之後的訪問重復第2步的行為
離線機制的緩存用途
從Manifest的機制來看,即使我們不是為了創建離線應用,也同樣可以使用這種機制用於緩存文件,可以說是給Web緩存提供多一種可以選擇的途徑。
存在的問題:緩存文件更新控制不靈活
就目前HTML5提供的manifest機制來講,一個頁面只能引用一個manifest頁面,而且一旦發現這個manifest改變了,就會把裡面所有定義的緩存文件全部重新拉取一遍,不管實際上有沒有更新,控制比較不靈活。針對這個問題,也有的同學提出了一些建議,比如把需要緩存的文件分模塊切分到不同manifest中,並分開用HTML引用,再使用強大的iframe嵌入到入口頁面,這樣就當某一個模式需要有更新,不會導致其他模塊的文件也重新拉取一遍。
HTML5 之本地存儲localstorage
HTML5給我們提供本地存儲localstorage特性,嚴格來講,其實已經不算傳統Web緩存的范疇。因為它存儲的地方是跟Web緩存分開的,是瀏覽器重新開辟的一個地方。
localstorage的作用
本地存儲localstorage的作用主要使Web頁面能夠通過瀏覽器提供的set/get介面,存儲一些自定義的信息到本地硬碟,並且在單次訪問或以後的訪問過程中隨時獲取或修改。
Localstorage的使用
Localstorage提供了幾個非常易用的Api,setItem/getItem/removeItem/clear,具體的可以參考:Html5 Step by Step(二) 本地存儲
Localstorage的緩存用途
Localstorage設計的本意可能是用來存儲一些用戶操作的個性化設置的文本類型的信息和數據,當我們其實也可能拿來當Web緩存區使用,比如我們可以將Base64格式編碼的圖片信息,存在localstorage中,再次訪問時,直接本地獲取後,使用Css3的Data:image的方式直接展現出來。
存在的問題:大小限制
按照目前標准,目前瀏覽器只給每個獨立的域名提供5m的存儲空間,當存儲超過5m,瀏覽器就會彈出警告框。
可以說,HTML5的Manifest和localstorage是給我們在考慮Web緩存的時候提供了多一種思路,當你開發的應用只面對現代瀏覽器的時候,不妨可以考慮一下
F. html5基本知識點
一、HTML的開發工具和使用的瀏覽器
開發工具:記事本等文本編輯器,Atom、VisualStudioCode( VSCode)、Brackets、Sublime text和Hbuider。
瀏覽器:Chrome、Firefox、IE、Safari、IPhone、Android。
二、HTML的基本要素
DOCTYPE 描述文檔的類型
html 網頁的根元素,寫在網頁的在外面
head 網頁的頭部信息,寫在html標記的裡面
body 網頁的內容,寫在html標記的裡面
具體描述:
1、DOCTYPE 描述文檔的類型,規定web 瀏覽器關於頁面使用哪個 HTML 版本進行編寫的指令。
網頁可以使用的具體版本,網頁中可以使用那些標記,每個版本的DTD版本均有不同
使用例子
HTML4的例子
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML5的例子
(二)、title、base標記
title和base標記都是寫在head標簽中
title:設置網頁的標題
寫法:<title>內容</title>。
base:指定網頁跳轉基準URL,如果不指定的話默認為當前網站的當前路徑。
寫法:<base href="http://www.aaa.zzz/">
base屬性值:
href 指定網頁跳轉到基準URL,如果不指定的話則默認為當前網站的當前路徑。
<base href="http://.com/">這是將頁面跳轉到網路的網站打開。
target 指定鏈接的跳轉幀如果不指定的話,則是在當前頁面中跳轉。
<base target="_blank">網頁中的鏈接都應該在新的窗口中打開。
terget屬性值:
_blank 在新窗口中打開被鏈接的文檔
_self 默認值,在相同框架中打開被鏈接的文檔
_parent 在父框架集中
_top 在整個窗口中打開被鏈接文檔·
framename 在指定框架中打開被鏈接文檔
(三)、link標記
link標記:鏈接外部文件時使用的標記,可以把外部文件的內容引入到當前文件中來,使當前網頁實現更多的功能。
link屬性:
href:指定鏈接外部路徑的路徑和文件名,要設置全路徑並且帶文件名
rel:引用文件,引用資源的類型定義
我們在使用link標簽引用外部文件的時候,外部文件的類型是多種多樣的。
alternate 代替文檔(種子,其他語言版本,其他格式等等)
author 網頁的作者
help 幫助文件的鏈接
icon 網頁的圖標
next 如果是連續網頁的時候,指定下一個網頁
prefetch 把鏈接外部資源時提前緩存起來。
prev 如果是連續網頁
media 鏈接文件或是資源屬於哪一種資源。
hreflang 鏈接文件的語言種類
type 鏈接文件的mi/me類型(比如說,圖片圖標文本)
sizes 根據link鏈接文件的類型,來指定文件的大小
代碼示例:
鏈接網頁圖標:
注意:後面的href和前面type標注的類型要一致,這樣既可以顯示在瀏覽器,又可以顯示在手機上
鏈接外部樣式單
說明:
alternate 會在瀏覽器中會彈出一個對話框,供用戶可以進行選擇
media 表示媒體類型為屏幕,可以是手機,但不包括列印機和投影儀
title 對這個link進行簡單的說明
網站RSS種子指定
為搜索引擎的准備的網頁的URL
G. html5緩存的問題,如何正確設置
html5緩存正確的設置辦法:
1、啟用緩存
設置方法:
<html manifest="example.appcache">
...
</html>
2、設定緩存訪問的范圍,配置到MANIFEST中:
CACHE MANIFEST
# v1 - 2011-08-13
# This is a comment.
http://www.example.com/index.html
http://www.example.com/header.png
http://www.example.com/blah/blah