찾다
웹 프론트엔드HTML 튜토리얼HTML5 오프라인 애플리케이션 및 클라이언트 스토리지 구현

이 글은 주로 HTML5 오프라인 애플리케이션 구현과 클라이언트 스토리지에 대한 관련 정보를 소개합니다. 편집자는 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴보겠습니다

오프라인 웹 애플리케이션 개발 지원은 HTML5의 또 다른 초점입니다. 소위 오프라인 웹 애플리케이션은 장치가 인터넷에 접속할 수 없는 경우에도 계속 실행할 수 있는 애플리케이션입니다.

오프라인 웹 애플리케이션을 개발하려면 여러 단계가 필요합니다. 첫 번째는 기기가 인터넷에 액세스할 수 있는지 여부를 앱이 인식하여 다음에 올바른 조치를 취할 수 있도록 하는 것입니다. 그런 다음 애플리케이션이 제대로 작동하려면 특정 리소스(이미지, Javascript, CSS 등)에도 액세스할 수 있어야 합니다. 무엇보다 사용자가 데이터를 저장할 수 있는 로컬 공간이 있어야 하며, 인터넷 접속 여부에 관계없이 읽고 쓰는 데 방해가 되지 않습니다.

HTML5 및 관련 API를 사용하면 오프라인 애플리케이션 개발이 현실이 됩니다.

오프라인 감지

기기가 온라인인지 오프라인인지 확인하기 위해 HTML5는 navigator.onLine 속성을 정의합니다. true 값은 기기가 인터넷에 액세스할 수 있음을 나타내고 false 값은 기기가 인터넷에 액세스할 수 있음을 나타냅니다. 오프라인 상태입니다.

if (navigator.onLine) {
    // 正常工作
} else {
    // 执行离线状态时的任务
}

navigator.onLine 속성 외에도 navigator.onLine의 특정 호환성 문제로 인해 네트워크 사용 가능 여부를 더 잘 판단하기 위해 HTML5는 온라인과 오프라인의 두 가지 이벤트도 정의합니다.

네트워크가 오프라인과 온라인 사이를 전환할 때 창 개체에서 다음 두 이벤트가 트리거됩니다.

window.addEventListener('online', function() {
    // 正常工作
});

window.addEventListener('offline', function() {
    // 执行离线状态时的任务
});

실제 응용 프로그램에서는 페이지가 로드된 후 navigator.onLine을 통해 초기화를 얻는 것이 가장 좋습니다. 그런 다음 위의 두 이벤트를 사용하여 네트워크 연결 상태가 변경되는지 확인합니다. 위 이벤트가 발생하면 navigator.onLine 속성 값도 변경되지만, 네트워크 상태 변화를 감지하려면 이 속성을 수동으로 폴링해야 합니다.

애플리케이션 캐시

HTML5의 애플리케이션 캐시, 줄여서 appcache는 오프라인 웹 애플리케이션 개발을 위해 특별히 설계되었습니다. Appcache는 브라우저의 캐시와 분리된 캐시 영역입니다. 이 캐시에 데이터를 저장하려면 다운로드하고 캐시할 리소스를 나열하는 매니페스트 파일을 사용하세요. 설명 파일 예:

CACHE MANIFEST
# Comment

file.js
file.css

HTML로 인용:

<html manifest="./xxx.manifest">

xxx.manifest 파일의 MIME 유형은 text/cache-manifest여야 합니다.

이 API의 핵심은 applicationCache 개체입니다. 이 개체에는 상태 속성이 있으며, 이 속성의 값은 다음과 같은 애플리케이션 캐시 상태를 나타내는 상수입니다.

  • 0: 캐시 없음. 페이지와 관련된 애플리케이션 캐시가 없습니다

  • 1

  • 4: 업데이트가 완료되었습니다. 즉, 애플리케이션 캐시에서 리소스를 업데이트했으며 모든 리소스가 다운로드되어 swapCache()를 통해 사용할 수 있습니다
  • 5: 폐기됨, 즉 애플리케이션 캐시의 설명 파일이 더 이상 존재하지 않으므로 페이지가 더 이상 애플리케이션 캐시에 액세스할 수 없습니다.
  • 관련 이벤트:
  • checking: 브라우저가 업데이트를 찾을 때 트리거됩니다. 애플리케이션 캐시의 경우
  • error: 업데이트 확인 또는 리소스 다운로드 중 오류가 발생할 때 트리거됨

    noupdate: 설명 파일을 확인하고 파일에 변경 사항이 없음을 발견할 때 트리거
  • downloading: 다음 경우에 트리거됨 응용 프로그램 캐시 리소스 다운로드 시작
  • progress: 파일 다운로드 응용 프로그램 캐시 프로세스 중에 지속적으로 트리거됩니다.
  • cached: 애플리케이션 캐시를 완전히 사용할 수 있을 때 트리거됩니다.

  • 일반적으로 이러한 이벤트는 페이지가 로드될 때 위의 순서대로 발생합니다. 순서대로 트리거됩니다. 위 이벤트는 update() 메서드를 호출하여 수동으로 트리거할 수도 있습니다.

  • Data Storage

  • Cookie
  • HTTP 쿠키는 일반적으로 쿠키라고 직접 불리며 클라이언트의 세션 정보를 저장하는 데 사용됩니다. 표준에 따르면 서버는 세션 정보가 포함된 HTTP 요청에 대한 응답의 일부로 Set-Cookie HTTP 헤더를 보내야 합니다. 서버 응답 헤더 예:

HTTP/1.1 200 OK

Content-type: text/html

Set-Cookie: name=value

Other-header: other-header-value그런 다음 브라우저 Set-Cookie 세션 정보 을 클릭한 다음 각 요청에 쿠키 HTTP 헤더를 추가하여 다음과 같이 정보를 서버로 다시 보냅니다.

GET /index.html HTTP/1.1Cookie: name=valueOther-header: other-header-value

서버로 다시 전송된 추가 정보는 클라이언트가 어떤 요청에서 왔는지 고유하게 확인하는 데 사용될 수 있습니다.

전체 쿠키에는 다음이 포함됩니다.


이름: 쿠키를 고유하게 식별하는 이름입니다. URL로 인코딩되어야 합니다.

값: 쿠키에 저장된 문자열 값입니다. URL로 인코딩되어야 합니다.

  • 域: cookie 对于哪个域是有效的。

  • 路径: 对于指定域中的那个路径,应该向服务器发送 cookie。

  • 失效时间: 表示 cookie 何时应该被删除的时间戳。

  • 安全标志: 指定后,cookie 只有在使用 SSL 连接的时候才发送到服务器。

  • 复制代码

    代码如下:

    Set-Cookie:name=value; domain=www.laixiangran.cn; path=/; expires=Mon, 29 Oct 2018 03:53:10 GMT; secure;

    基本用法

    在 JavaScript 中操作 cookie 有些复杂,这是因为 document.cookie 属性在不同的使用方式中表现出不同的行为。

    当用来获取属性值时,document.cookie 返回当前页面可用的所有 cookie 字符串,一系列由分号隔开的键值对,如下所示:

    document.cookie
    // name1=value1;name2=value2;name3=value3;

    当用来设置值时,document.cookie 属性会设置一个新的 cookie 字符串添加到现有的 cookie 集合中,并不会像普通对象设置属性一样覆盖原 cookie 的值,除非设置的 cookie 的名称已经存在,如下所示:

    // cookie 的名称不存在
    document.cookie = &#39;name4=value4&#39;
    // name1=value1;name2=value2;name3=value3;name4=value4;
    // 而不是 name4=value4;
    // cookie 的名称存在
    document.cookie = &#39;name3=value4&#39;
    // name1=value1;name2=value2;name3=value4;

    从上面的代码我们可以看出,我们要读取或者修改或者删除指定 cookie 的值都不是很直观方便,因此我们可以封装一些方法,方便我们对 cookie 的操作:

    var CookieUtil = {
    
        get: function (name) {
            var cookieName = encodeURIComponent(name) + "=",
                cookieStart = document.cookie.indexOf(cookieName),
                cookieValue = null,
                cookieEnd;
    
            if (cookieStart > -1) {
                cookieEnd = document.cookie.indexOf(";", cookieStart);
                if (cookieEnd == -1) {
                    cookieEnd = document.cookie.length;
                }
                cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
            }
    
            return cookieValue;
        },
    
        set: function (name, value, expires, path, domain, secure) {
            var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
    
            if (expires instanceof Date) {
                cookieText += "; expires=" + expires.toGMTString();
            }
    
            if (path) {
                cookieText += "; path=" + path;
            }
    
            if (domain) {
                cookieText += "; domain=" + domain;
            }
    
            if (secure) {
                cookieText += "; secure";
            }
    
            document.cookie = cookieText;
        },
    
        unset: function (name, path, domain, secure) {
            this.set(name, "", new Date(0), path, domain, secure);
        }
    };

    使用方法:

    // 设置 cookie
    CookieUtil.set(&#39;name&#39;, &#39;lai&#39;);
    CookieUtil.set(&#39;sex&#39;, &#39;man&#39;);
    
    // 读取 cookie
    CookieUtil.get(&#39;name&#39;); // &#39;lai&#39;
    CookieUtil.get(&#39;sex&#39;); // &#39;man&#39;
    
    // 删除 cookie
    CookieUtil.unset(&#39;name&#39;);
    CookieUtil.unset(&#39;sex&#39;);
    
    // 设置 cookie,包括它的路径、域、失效日期
    CookieUtil.set(&#39;name&#39;, &#39;lai&#39;, &#39;/&#39;, &#39;www.laixiangran.cn&#39;, new Date());

    大小限制

    • 每个域的 cookie 总数是有限,不同浏览器之间所有不同,IE6 以下是最多 20 个,IE7 以上最多 50 个,Firefox最多 50 个,Opera 最多 30 个,Safari 和 Chrome 不限制。

    • cookie 的尺寸也有限制,大多数浏览器有大约 4096B。

    Web Storage

    • Web Storage 的目的是克服由 cookie 带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。Web Storage 的两个主要目标是:

    • 提供一种在 cookie 之外存储会话数据的路径。

    • 提供一种存储大量可以跨会话存在的数据的机制。

    Web Storage 主要定义了两种对象:sessionStorage 和 localStorage,是 Storage 对象的实例,这两个对象区别如下:

    • sessionStorage: 存储特定于某个会话的数据,也就是该数据只保持到浏览器关闭。存储数据大小大多数限制在 2.5M,少数浏览器限制在 5M 或者不限制。

    • localStorage: 数据保存到通过 JavaScript 删除或者是用户清除浏览器缓存。存储数据大小大多数限制在 5M,少数浏览器限制在 2.5M 或者不限制。

    Storage 类型有如下方法:

    • clear(): 删除所有值。

    • getItem(name): 根据指定的名字 name 获取对应的值。

    • key(index): 获取 index 位置处的值的名字。

    • removeItem(name): 删除由 name 指定的键值对。

    • setItem(name, value): 为指定的 name 设置一个对应的值,值为字符串。

    对 sessionStorage 和 localStorage 进行操作都会触发 storage 事件,该事件对象有以下属性:

    • domain: 发生变化的存储空间的域名。

    • key: 设置或者删除的键名。

    • newValue: 如果是设置值,则是新值;如果是删除键,则是null。

    • oldValue: 键被更改之前的值。

    IndexedDB

    Indexed Database API,简称为 IndexedDB,是在浏览器中保存结构化数据的一种数据库。其思想是创建一套 API,方便保存和读取 JavaScript 对象,同时还支持查询和搜索。

    IndexedDB 设计的操作完全是异步进行的。因此,大多数操作会以请求方式进行。

    基本用法

    var indexedDB = window.indexedDB || window.msIndexedDB || window.mozIndexedDB || window.webkitIndexedDB, // 获取 indexedDB
        request,
        store,
        database,
        users = [
            {
                username: "007",
                firstName: "James",
                lastName: "Bond",
                password: "foo"
            },
            {
                username: "ace",
                firstName: "John",
                lastName: "Smith",
                password: "bar"
            }
        ];
    
    // 打开数据库
    request = indexedDB.open("example");
    
    // 注册 onerror 及 onsuccess 事件
    request.onerror = function (event) {
        alert("Something bad happened while trying to open: " + event.target.errorCode);
    };
    request.onsuccess = function (event) {
        database = event.target.result;
        
        // 操作数据库
        initializeDatabase();
    };
    
    function initializeDatabase() {
        if (database.version != "1.0") {
        
            // 设置数据库版本号
            request = database.setVersion("1.0");
            request.onerror = function (event) {
                alert("Something bad happened while trying to set version: " + event.target.errorCode);
            };
            request.onsuccess = function (event) {
            
                // 使用 users 创建对象存储空间
                store = database.createObjectStore("users", {keyPath: "username"});
                var i = 0,
                    len = users.length;
    
                while (i < len) {
                
                    // 插入新值
                    store.add(users[i++]);
                }
    
                alert("Database initialized for first time. Database name: " + database.name + ", Version: " + database.version);
            };
        } else {
            alert("Database already initialized. Database name: " + database.name + ", Version: " + database.version);
            
            // transaction() 创建事务,objectStore() 将存储空间传入事务
            request = database.transaction("users").objectStore("users").get("007");
            request.onsuccess = function (event) {
                alert(event.target.result.firstName);
            };
        }
    }

    限制

    • 和 Web Storage类似,只能由同源(相同协议、域名和端口)页面操作,因此不能跨域共享信息。

    • Firefox 大小上限为 50M,移动端的 Firefox 大小上限为 5M,不允许本地文件访问。

    • Chrome 大小上限为 5M,允许本地文件访问。


    위 내용은 HTML5 오프라인 애플리케이션 및 클라이언트 스토리지 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    HTML, CSS 및 JavaScript의 미래 : 웹 개발 동향HTML, CSS 및 JavaScript의 미래 : 웹 개발 동향Apr 19, 2025 am 12:02 AM

    HTML의 미래 트렌드는 의미론 및 웹 구성 요소이며 CSS의 미래 트렌드는 CSS-In-JS 및 CSShoudini이며, JavaScript의 미래 트렌드는 WebAssembly 및 서버리스입니다. 1. HTML 시맨틱은 접근성과 SEO 효과를 향상시키고 웹 구성 요소는 개발 효율성을 향상 시키지만 브라우저 호환성에주의를 기울여야합니다. 2. CSS-in-JS는 스타일 관리 유연성을 향상 시키지만 파일 크기를 증가시킬 수 있습니다. CSShoudini는 CSS 렌더링의 직접 작동을 허용합니다. 3. Webosembly는 브라우저 애플리케이션 성능을 최적화하지만 가파른 학습 곡선을 가지고 있으며 서버리스는 개발을 단순화하지만 콜드 스타트 ​​문제의 최적화가 필요합니다.

    HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작Apr 18, 2025 am 12:09 AM

    웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. 1. HTML은 웹 페이지 구조를 정의하고, 2. CSS는 웹 페이지 스타일을 제어하고 3. JavaScript는 동적 동작을 추가합니다. 그들은 함께 현대 웹 사이트의 프레임 워크, 미학 및 상호 작용을 구축합니다.

    HTML의 미래 : 웹 디자인의 진화 및 트렌드HTML의 미래 : 웹 디자인의 진화 및 트렌드Apr 17, 2025 am 12:12 AM

    HTML의 미래는 무한한 가능성으로 가득합니다. 1) 새로운 기능과 표준에는 더 많은 의미 론적 태그와 WebComponents의 인기가 포함됩니다. 2) 웹 디자인 트렌드는 반응적이고 접근 가능한 디자인을 향해 계속 발전 할 것입니다. 3) 성능 최적화는 반응 형 이미지 로딩 및 게으른로드 기술을 통해 사용자 경험을 향상시킬 것입니다.

    HTML vs. CSS vs. JavaScript : 비교 개요HTML vs. CSS vs. JavaScript : 비교 개요Apr 16, 2025 am 12:04 AM

    웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. HTML은 컨텐츠 구조를 담당하고 CSS는 스타일을 담당하며 JavaScript는 동적 동작을 담당합니다. 1. HTML은 태그를 통해 웹 페이지 구조와 컨텐츠를 정의하여 의미를 보장합니다. 2. CSS는 선택기와 속성을 통해 웹 페이지 스타일을 제어하여 아름답고 읽기 쉽게 만듭니다. 3. JavaScript는 스크립트를 통해 웹 페이지 동작을 제어하여 동적 및 대화식 기능을 달성합니다.

    HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?HTML : 프로그래밍 언어입니까 아니면 다른 것입니까?Apr 15, 2025 am 12:13 AM

    Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworksporstylingandjavaScriptOfforIncincivity, WebDevelopment 향상.

    HTML : 웹 페이지 구조 구축HTML : 웹 페이지 구조 구축Apr 14, 2025 am 12:14 AM

    HTML은 웹 페이지 구조를 구축하는 초석입니다. 1. HTML은 컨텐츠 구조와 의미론 및 사용 등을 정의합니다. 태그. 2. SEO 효과를 향상시키기 위해 시맨틱 마커 등을 제공합니다. 3. 태그를 통한 사용자 상호 작용을 실현하려면 형식 검증에주의를 기울이십시오. 4. 자바 스크립트와 결합하여 동적 효과를 달성하기 위해 고급 요소를 사용하십시오. 5. 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함되며 검증 도구가 필요합니다. 6. 최적화 전략에는 HTTP 요청 감소, HTML 압축, 시맨틱 태그 사용 등이 포함됩니다.

    텍스트에서 웹 사이트로 : HTML의 힘텍스트에서 웹 사이트로 : HTML의 힘Apr 13, 2025 am 12:07 AM

    HTML은 웹 페이지를 작성하는 데 사용되는 언어로, 태그 및 속성을 통해 웹 페이지 구조 및 컨텐츠를 정의합니다. 1) HTML과 같은 태그를 통해 문서 구조를 구성합니다. 2) 브라우저는 HTML을 구문 분석하여 DOM을 빌드하고 웹 페이지를 렌더링합니다. 3) 멀티미디어 기능을 향상시키는 HTML5의 새로운 기능. 4) 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함됩니다. 5) 최적화 제안에는 시맨틱 태그 사용 및 파일 크기 감소가 포함됩니다.

    HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

    WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    Dreamweaver Mac版

    Dreamweaver Mac版

    시각적 웹 개발 도구

    mPDF

    mPDF

    mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    WebStorm Mac 버전

    WebStorm Mac 버전

    유용한 JavaScript 개발 도구

    MinGW - Windows용 미니멀리스트 GNU

    MinGW - Windows용 미니멀리스트 GNU

    이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.