搜尋
首頁web前端前端問答html5支援離線應用程式嗎

html5支援離線應用程式嗎

Aug 01, 2022 pm 05:57 PM
html5離線應用

html5支援離線應用程式。離線應用程式是html5新增的特性,利用本機快取機制,使得使用者可以在網頁或應用程式在沒有網路的情況下依然可以使用。為了能夠讓Web應用程式在離線狀態的時候也能正常運作,必須把所有構成Web應用程式的資源文件,諸如HTML文件,CSS文件,JavaScript腳本文件放在本地快取中,這樣當伺服器沒有和網路連接時,也可以利用本地快取中的資源檔案來正常運行應用程式。

html5支援離線應用程式嗎

本教學操作環境:windows7系統、HTML5版、Dell G3電腦。

HTML5新增了離線應用,利用本機快取機制,離線應用程式使得我們可以在網頁或應用程式在沒有網路的情況下依然可以使用。當客戶端本機與web應用程式的伺服器沒有建立連線時,也能正常在客戶端本機使用該web應用程式進行有關操作。

為了能夠讓Web應用程式在離線狀態的時候也能正常工作,必須把所有構成Web應用程式的資源文件,諸如HTML文件,CSS文件,JavaScript腳本文件放在本地快取中,當伺服器沒有和網路連線時,也可以利用本機快取中的資源檔案來正常執行Web應用程式。

離線應用程式的使用需要以下幾個步驟:

  • 離線偵測(決定是否連網)

  • 存取一定的資源

  • 有一塊本地空間用來保存資料(無論是否上網都不妨礙讀寫)

使用HTML5離線web應用程式

1、檢查瀏覽器的支援情況的方法

  if(window.applicationCache){
        //浏览器支持离线应用
  }

#2、關於描述檔
描述檔用來列出需要快取和不需要快取的資源,以備離線時使用。
描述檔的副檔名以前使用.manifest,現在推薦使用.appcache,並且描述檔需要配置正確的MIME-type,即"text/cache-manifest",必須在web伺服器上進行設定(文件編碼必須是UTF-8)。不同的伺服器有不同的設定方法,具體這裡不詳述。

首行必須以以下字串開始

    CACHE MANIFEST

剩下的就是要快取的文件的URL,一行一個(相對URL是相對於清單文件而言的,不是相對於文件)

    #以“#”开头的是注释
    common.css
    common.js

這樣這個檔案中列舉的所有的檔案都會被快取

在清單中,可以使用特殊的區域頭來標識頭資訊之後的清單項目的類型,上面的最簡單的快取屬於"CACHE:"區域。
像這樣

    #该头信息之后的内容需要缓存    CACHE:
    common.css
    connom.js

以"NETWORK:"開頭的區域列舉的文件,總是從線上獲取,不緩存

##NETWORK:頭資訊支持通配符"*",表示任何未明確列舉的資源,都將透過網路載入

    #该头信息之后的内容不需要缓存,总是从线上获取
    NETWORK:
    a.css
    #表示以name开头的资源都不要缓存
    name/

以"FALLBACK:"開頭的區域中的內容,提供了取得不到快取資源時的備選資源路徑該區域中的內容,每一行包含兩個URL(第一個URL是一個前綴,任何符合的資源都不被緩存,第二個URL表示需要被緩存的資源)

    FALLBACK:
    name/  example.html

一個清單可以有任意多個區域,且位置沒有限制。

3、建立離線應用程式假設我們要建立一個包含css,js,html的單頁應用,同時要為這個單頁應用程式新增離線支援。

要將描述檔與頁面關聯起來,需要使用html標籤的manifest特性來指定描述檔的路徑

    <html manifest=&#39;./offline.appcche&#39;>

開發離線應用程式的第一步就是偵測裝置是否離線

  • HTML5新增了navigator.onLine屬性

    當該屬性為true的時候表示聯網,值為false的時候,表示離線

  •   if(navigator.onLine){      //联网  }else{      //离线  }
** 附註:IE6以上瀏覽器及其他標準瀏覽器都支援此屬性**

    online事件(IE9 瀏覽器支援)
當網路從離線變成線上的時候觸發該事件,在window上觸發該事件,不需要刷新

 window.online = function(){        //需要触发的事件    }

  • offline事件(IE9 瀏覽器支援)

    當網路從線上變成離線的時候觸發該事件,和online事件一樣,在window上觸發該事件,不需要刷新

  • window.offline = function(){      //需要触发的事件  }
應用程式快取

應用程式快取(Application Cache)是從瀏覽器的快取中分出來的一塊快取區(大小依特定瀏覽器而定,一般是5M)

應用快取和網頁快取的差別:

    應用程式快取為整個web應用程式服務,網頁快取服務於單一網頁
  • 應用快取只快取指定頁面需要的指定資源(可人為控制),任何網頁都具有網頁快取(瀏覽器預設行為)
  • 應用程式快取不會隨著清除瀏覽器快取而消失
  • 應用程式快取不會像網頁快取一樣,舊資料會被最新一次的新資料取代
  • 應用程式快取可以離線訪問,網頁快取必須在線上存取
  • 應用程式快取可靠,可控,網頁快取不可控
#應用程式快取的優勢

  • 离线浏览
  • 速度更快--已缓存资源加载更快
  • 减少负载--浏览器只从服务器下载更新过的文件

一个web应用首次下载并缓存之后,任何加载请求都优先来自于缓存,因此可以实现离线缓存。如果不需要使用离线缓存了,就需要在服务器端删除描述文件,或者删除HTML页面中的manifest属性。

一旦应用被缓存,则缓存始终不变。那么,怎样才能改变缓存

  • 用户清空应用缓存
  • manifest文件被修改
  • 使用update()方法更新缓存

如果服务器上的文件有所修改的话,那么修改描述文件中注释行的日期或者版本号是一个不错的使浏览器重新缓存文件的办法

此外,我们还可以使用HTML5提供的API来操作和更新缓存

applicationCache API

applicationCache API是一个操作应用缓存的接口。新的window.applicationCache对象可以触发一系列与缓存状态相关的事件。
这个对象有一个status属性,值为常量,表示缓存状态

  • 0:没有与页面相关的应用缓存(未缓存)
  • 1:应用缓存未得到更新(空闲)
  • 2:正在下载描述文件并检查更新(检查中)
  • 3:应用缓存正在下载描述文件中指定的资源(下载中)
  • 4:应用缓存已经更新了资源,而且所有资源都已下载完毕,可以通过swapCache()来使用了(更新就绪)
  • 5:应用缓存的描述文件不存在了,页面无法再访问应用缓存(已过期)

这个对象有以下事件,表示其状态的改变

  • 每次载入一个设置了manifest属性的HTML文件,首先会触发checking事件
  • 如果应用程序已经缓存,并且清单文件没有改动,则浏览器触发noupdate事件
  • 如果应用程序已经缓存,并且清单文件发生改动,则浏览器触发downloading事件,下载完毕后触发updateready事件
  • 如果应用程序未缓存,则downloading事件和progress事件都会触发,但是下载完成后触发cached事件而不是updateready事件
  • 如果处于离线,无法检测清单状态,则触发error事件,如果引用一个不存在的清单文件,也会触发error事件
  • 如果处于在线,应用也缓存了,但是清单文件不存在,则会触发obsolete事件,并将应用程序从缓存中清除。

一般来讲,这些事件会随着页面加载按上述顺序依次触发

update()方法

通过update()方法也可以手工干预,让应用缓存为检查更新而触发上述事件

    applicationCache.update();

update()一经调用,应用缓存就会去检查描述文件是否更新,触发checking事件,然后页面就会像刚刚加载一样,继续执行后续操作。如果触发了cached事件,则说明应用缓存已经准备就绪,不会再发生其他操作。

swapCache()方法

如果触发了updateready事件,则说明新版本的应用缓存已经可用,需要调用swapCache()方法来启用新的应用缓存。

    applicationCache.onupdateready = function(){
        applicationCache.swapCache();
    };

浏览器检查清单文件,以及更新缓存的操作是异步的,因此可能是在载入旧缓存之后进行,因此可能需要载入两次才能显示最新的内容,因此需要提示用户

    window.applicationCache.onupdateready = function(){
        var con = comfirm(&#39;有新内容可用,是否重新加载?&#39;);
        if(con){
            location.reload();
        }
    }

相关推荐:《html视频教程

以上是html5支援離線應用程式嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
usestate()與用戶ducer():為您的狀態需求選擇正確的掛鉤usestate()與用戶ducer():為您的狀態需求選擇正確的掛鉤Apr 24, 2025 pm 05:13 PM

selectUsestate()forsimple,獨立的variables; useusereducer()forcomplexstateLogicorWhenStatedIppedsonPreviousState.1)usestate()isidealForsImpleupDatesLikeToggGlikGlingaBglingAboolAboolAupDatingacount.2

使用usestate()管理狀態:實用教程使用usestate()管理狀態:實用教程Apr 24, 2025 pm 05:05 PM

useState優於類組件和其它狀態管理方案,因為它簡化了狀態管理,使代碼更清晰、更易讀,並與React的聲明性本質一致。 1)useState允許在函數組件中直接聲明狀態變量,2)它通過鉤子機制在重新渲染間記住狀態,3)使用useState可以利用React的優化如備忘錄化,提升性能,4)但需注意只能在組件頂層或自定義鉤子中調用,避免在循環、條件或嵌套函數中使用。

何時使用usestate()以及何時考慮替代狀態管理解決方案何時使用usestate()以及何時考慮替代狀態管理解決方案Apr 24, 2025 pm 04:49 PM

useUsestate()forlocalComponentStateMangementighatighation; 1)usestate()isidealforsimple,localforsimple.2)useglobalstate.2)useglobalstateSolutionsLikErcontExtforsharedState.3)

React的可重複使用的組件:增強代碼可維護性和效率React的可重複使用的組件:增強代碼可維護性和效率Apr 24, 2025 pm 04:45 PM

ReusableComponentsInrectenHanceCodainainability and效率byallowingDevelostEsteSeTheseTheseThesAmeCompOntionActActRossDifferentPartSofanApplicationorprojects.1)heSredunceRedUndenceNandSimplifyUpdates.2)yensureconsistencyInuserexperience.3)

反應中的虛擬DOM:通過有效更新來提高性能反應中的虛擬DOM:通過有效更新來提高性能Apr 24, 2025 pm 04:41 PM

TheVirtualDOMisalightweightin-memorycopyoftherealDOMusedbyReacttooptimizeUIupdates.ItboostsperformancebyminimizingdirectDOMmanipulationthroughaprocessofupdatingtheVirtualDOMfirst,thenapplyingonlynecessarychangestotheactualDOM.

HTML和React的集成:實用指南HTML和React的集成:實用指南Apr 21, 2025 am 12:16 AM

HTML與React可以通過JSX無縫整合,構建高效的用戶界面。 1)使用JSX嵌入HTML元素,2)利用虛擬DOM優化渲染性能,3)通過組件化管理和渲染HTML結構。這種整合方式不僅直觀,還能提升應用性能。

React和HTML:渲染數據和處理事件React和HTML:渲染數據和處理事件Apr 20, 2025 am 12:21 AM

React通過state和props高效渲染數據,並通過合成事件系統處理用戶事件。 1)使用useState管理狀態,如計數器示例。 2)事件處理通過在JSX中添加函數實現,如按鈕點擊。 3)渲染列表需使用key屬性,如TodoList組件。 4)表單處理需使用useState和e.preventDefault(),如Form組件。

後端連接:反應如何與服務器互動後端連接:反應如何與服務器互動Apr 20, 2025 am 12:19 AM

React通過HTTP請求與服務器交互,實現數據的獲取、發送、更新和刪除。 1)用戶操作觸發事件,2)發起HTTP請求,3)處理服務器響應,4)更新組件狀態並重新渲染。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具