>  기사  >  웹 프론트엔드  >  html5는 오프라인 애플리케이션을 지원합니까?

html5는 오프라인 애플리케이션을 지원합니까?

青灯夜游
青灯夜游원래의
2022-08-01 17:57:192087검색

html5는 오프라인 애플리케이션을 지원합니다. 오프라인 애플리케이션은 로컬 캐싱 메커니즘을 사용하여 사용자가 네트워크 없이 웹 페이지나 애플리케이션을 계속 사용할 수 있는 HTML5의 새로운 기능입니다. 오프라인 상태에서 웹 애플리케이션이 정상적으로 작동하기 위해서는 HTML 파일, CSS 파일, JavaScript 스크립트 파일 등 웹 애플리케이션을 구성하는 모든 리소스 파일을 로컬 캐시에 배치하여 서버가 연결되지 않을 때 네트워크 로컬 캐시의 리소스 파일을 사용하여 응용 프로그램을 정상적으로 실행할 수도 있습니다.

html5는 오프라인 애플리케이션을 지원합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, HTML5 버전, Dell G3 컴퓨터.

HTML5에는 로컬 캐싱 메커니즘을 사용하여 오프라인 애플리케이션을 추가하여 네트워크가 없을 때에도 웹 페이지나 애플리케이션을 사용할 수 있습니다. 클라이언트가 웹 애플리케이션의 서버와 로컬로 연결되어 있지 않은 경우 클라이언트에서 로컬로 웹 애플리케이션을 사용하여 관련 작업을 정상적으로 수행할 수 있습니다.

웹 애플리케이션이 오프라인 상태에서도 제대로 작동하려면 HTML 파일, CSS 파일, JavaScript 스크립트 파일 등 웹 애플리케이션을 구성하는 모든 리소스 파일을 서버가 없을 때 로컬 캐시에 배치해야 합니다. 네트워크에 연결됨 연결되면 로컬 캐시에 있는 리소스 파일을 활용하여 웹 애플리케이션을 정상적으로 실행할 수도 있습니다.

오프라인 애플리케이션을 사용하려면 다음 단계가 필요합니다.

  • 오프라인 감지(인터넷 연결 여부 확인)

  • 특정 리소스에 액세스

  • 데이터 저장을 위한 로컬 공간이 있습니다(방해하지 않음) 온라인 여부에 관계없이 읽고 쓰기)

HTML5 오프라인 웹 애플리케이션 사용

1. 브라우저 지원 확인 방법

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

2 설명 파일은 나열하는 데 사용됩니다. 캐시해야 하는 리소스와 오프라인에서 사용하기 위해 리소스를 캐시할 필요가 없는 리소스입니다. 설명 파일의 확장자는 .manifest였지만 이제는 .appcache 사용을 권장하며, 설명 파일은 올바른 MIME 유형, 즉 "text/cache-manifest"로 구성되어야 합니다. 웹 서버에서 구성해야 합니다(파일 인코딩은 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 태그의 매니페스트 속성을 사용하여 설명 파일의 경로를 지정해야 합니다.

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

오프라인 애플리케이션 개발의 첫 번째 단계는 장치가 오프라인인지 감지하는 것입니다

HTML5에는 새로운 navigator.onLine 속성이 있습니다.

이 속성이 true이면 온라인을 의미하고, false이면 오프라인을 의미합니다.
  •   if(navigator.onLine){      //联网  }else{      //离线  }

    ** 참고: IE6 이상 브라우저와 기타 표준 브라우저는 이를 지원합니다. attribute**

online 이벤트(IE9+ 브라우저에서 지원)

    이 이벤트는 네트워크가 오프라인에서 온라인으로 변경될 때 발생합니다. 이 이벤트는 새로 고침 없이 창에서 발생합니다.
  •  window.online = function(){        //需要触发的事件    }

offline 이벤트(지원됨) IE9+ 브라우저)

온라인에서 네트워크가 변경될 때 이 이벤트는 오프라인일 때 발생합니다. 온라인 이벤트와 마찬가지로 이 이벤트는 새로 고침 없이 창에서 발생합니다.
  • window.offline = function(){      //需要触发的事件  }

    애플리케이션 캐시

  • 애플리케이션 캐시는 브라우저와 분리된 캐시입니다. 캐시 영역(크기는 특정 브라우저에 따라 다름, 일반적으로 5M)

애플리케이션 캐시와 웹 페이지 캐시의 차이점:

애플리케이션 캐시는 전체 웹 애플리케이션을 제공하고 웹 페이지 캐시는 단일 웹 페이지를 제공합니다

The 애플리케이션 캐시는 지정된 페이지만 캐시합니다. 필요한 지정된 리소스(수동으로 제어 가능), 모든 웹 페이지에는 웹 페이지 캐시가 있습니다(브라우저 기본 동작)
  • 브라우저 캐시가 지워져도 애플리케이션 캐시는 사라지지 않습니다.
  • 애플리케이션 캐시 웹 페이지 캐시와는 다르며 오래된 데이터는 최신 새 데이터로 대체됩니다
  • 애플리케이션 캐시는 오프라인으로 액세스할 수 있지만 웹 캐시는 온라인으로 액세스해야 합니다
  • 애플리케이션 캐시는 안정적이고 제어 가능하지만 웹 캐시는 제어할 수 없습니다.
  • 애플리케이션 캐시의 장점
    • 离线浏览
    • 速度更快--已缓存资源加载更快
    • 减少负载--浏览器只从服务器下载更新过的文件

    一个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으로 문의하세요.