Web 存储 随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,传统方式我们以document.cookie来进行存储的,但是由于其存储大小只有4k左右,并且解析也相当的复杂,给开发带来诸多不便,HTML5规范则提出解决方案。
H5 中有两种存储的方式 1、window.sessionStorage
会话存储:
2、window.localStorage
本地存储 :
有可能保存在浏览器内存里,有可能在硬盘里。
永久生效,除非手动删除(比如清理垃圾的时候)。
可以多窗口共享。
Web 存储的特性 (1)设置、读取方便。
(2)容量较大,sessionStorage 约5M、localStorage 约20M。
(3)只能存储字符串,可以将对象 JSON.stringify() 编码后存储。
常见 API 设置存储内容:
PS:可以新增一个 item,也可以更新一个 item。
读取存储内容:
根据键,删除存储内容:
清空所有存储内容:
根据索引值来获取存储内容:
sessionStorage 的 API 举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > </head > <body > <input type ="text" /> <button > sesssionStorage存储</button > <button > sesssionStorage获取</button > <button > sesssionStorage更新</button > <button > sesssionStorage删除</button > <button > sesssionStorage清除</button > <script > var txt = document .querySelector('input' ); var btns = document .querySelectorAll('button' ); btns[0 ].onclick = function () { window .sessionStorage.setItem('userName' , txt.value); window .sessionStorage.setItem('pwd' , '123456' ); window .sessionStorage.setItem('age' , 18 ); } btns[1 ].onclick = function () { txt.value = window .sessionStorage.getItem('userName' ); } btns[2 ].onclick = function () { window .sessionStorage.setItem('userName' , txt.value); } btns[3 ].onclick = function () { window .sessionStorage.removeItem('userName' ); } btns[4 ].onclick = function () { window .sessionStorage.clear(); } </script > </body > </html >
效果如下:
如上图所示,我们可以在 Storage 选项卡中查看 Session Storage 和Local Storage。
localStorage 的 API 举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > </head > <body > <input type ="text" /> <button > localStorage存储</button > <button > localStorage获取</button > <button > localStorage更新</button > <button > localStorage删除</button > <button > localStorage清除</button > <script > /* * localStorage * 数据存在硬盘上 * 永久生效 * 20M * */ var txt = document .querySelector('input' ); var btns = document .querySelectorAll('button' ); btns[0 ].onclick = function () { window .localStorage.setItem('userName' , txt.value); } btns[1 ].onclick = function () { txt.value = window .localStorage.getItem('userName' ); } btns[3 ].onclick = function () { window .localStorage.removeItem('userName' ); } </script > </body > </html >
案例:记住用户名和密码 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > </head > <body > <label for ="" > 用户名:<input type ="text" class ="userName" /> </label > <br /> <br /> <label for ="" > 密 码:<input type ="text" class ="pwd" /> </label > <br /> <br /> <label for ="" > <input type ="checkbox" class ="check" id ="" /> 记住密码 </label > <br /> <br /> <button > 登录</button > <script > var userName = document .querySelector('.userName' ); var pwd = document .querySelector('.pwd' ); var chk = document .querySelector('.check' ); var btn = document .querySelector('button' ); btn.onclick = function () { if (chk.checked) { window .localStorage.setItem('userName' , userName.value); window .localStorage.setItem('pwd' , pwd.value); } else { window .localStorage.removeItem('userName' ); window .localStorage.removeItem('pwd' ); } } window .onload = function ( ) { userName.value = window .localStorage.getItem('userName' ); pwd.value = window .localStorage.getItem('pwd' ); } </script > </body > </html >
网络状态 我们可以通过 window.onLine
来检测用户当前的网络状况,返回一个布尔值。另外:
网络状态监听的代码举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > </head > <body > <script > window .addEventListener('online' , function ( ) { alert('网络连接建立!' ); }); window .addEventListener('offline' , function ( ) { alert('网络连接断开!' ); }) </script > </body > </html >
应用缓存 HTML5中我们可以轻松的构建一个离线(无网络状态)应用,只需要创建一个 cache manifest
缓存清单文件。
优势 1、可配置需要缓存的资源;
2、网络无连接应用仍可用;
3、本地读取缓存资源,提升访问速度,增强用户体验;
4、减少请求,缓解服务器负担。
cache manifest
缓存清单文件缓存清单文件中列出了浏览器应缓存,以供离线访问的资源。推荐使用 .appcache
作为后缀名,另外还要添加MIME类型。
缓存清单文件里的内容怎样写:
(1)顶行写CACHE MANIFEST。
(2)CACHE: 换行 指定我们需要缓存的静态资源,如.css、image、js等。
(3)NETWORK: 换行 指定需要在线访问的资源,可使用通配符(也就是:不需要缓存的、必须在网络下面才能访问的资源)。
(4)FALLBACK: 换行 当被缓存的文件找不到时的备用资源(当访问不到某个资源时,自动由另外一个资源替换)。
格式举例1:
格式举例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CACHE MANIFEST CACHE: images/img1.jpg images/img2.jpg NETWORK: images/img3.jpg images/img4.jpg FALLBACK: 404.html
缓存清单文件怎么用:
(1)例如我们创建一个名为 demo.appcache
的文件。例如:
demo.appcache:
1 2 3 4 5 6 CACHE MANIFEST CACHE: http://img.smyhvae.com/2016040101.jpg
(2)在需要应用缓存在页面的根元素(html)里,添加属性manifest=”demo.appcache”。路径要保证正确。例如:
1 2 3 4 5 6 7 8 9 10 <!DOCTYPE html > <html manifest ="01.appcache" > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > </head > <body > <img src ="http://img.smyhvae.com/2016040101.jpg" alt ="" /> </body > </html >