HTML5 API

14 HTML5 API

HTML5是用于创建网页的超文本标记语言的最新版本。目前最新的版本号为5.1,于2016年11 成为了W3C的推荐标准。HTML5给规范添加了大量的新功能。还超越了实际的标记语言,带来 了很多相关的技术,比如CSS和JavaScript。我们在第10章介绍表单验证的时候,已经看到了一 些新的表单控件以及校验表单的API。在本章,我们将继续来看一下H TML5中有哪些其他的 API。

本章我们将学习如下内容:

  • Web Storage存储数据
  • Geolocation API获取位置信息
  • Web Worker

•插入音频和视频

•使用canvas进行绘图

・HTML5中的拖放

  • Notification API创建用户通知

14-1 Web Storage

Web Storage(Web存储)提供了一种方式,可以让Web页面实现在客户端浏览器中意键值对的形式 在本地保存数据。在了解H TML5的Web存储之前,我们先来看一下前面我们所介绍过的使用 Cookies存储机制的优缺点。

14-1-1 Cookie存储机制的优缺点

在讲解BOM一章时,我们有介绍过Cookie。Cookie是HTML4中在客户端存储简单用户信息的一 种方式,它使用文本来存储信息,当有应用程序使用Cookie时,服务器端就会发送Cookie到客户 端,客户端浏览器将会保存该Cookie信息。下一次页面请求时,客户端浏览器就会把Cookie发送 到服务器。Cookie最典型的应用是用来保存用户信息,用户设置和密码记忆等。

使用Cookie有其优点,也有其缺陷,其优点主要表现在以下几个方面。

・简单易用

・浏览器负责发送数据

・浏览器自动管理不同站点的Cookie。

但是经过长期的使用,Cookie的缺点也渐渐暴露了出来,主要有以下几点。

・因为使用的是简单的文本存储数据,所以Cookie的安全性很差。Cookie保存在客户端浏览 器,很容易被黑客窃取。

・Cookie中存储的数据容量有限,其上限为4KB。

•存储Cookie的数量有限,多数浏览器的上限为30或50个。

・如果浏览器的安全配置为最高级别,那么Cookie则会失效。

  • Cookie不适合大量数据的存储,因为Cookie会由每个对服务器的请求来传递,从而造成 Cookie速度缓慢效率低下。

14-1-2 为什么要用 Web Storage

HTML5的Web Storage提供了两种在客户端存储数据的方法,

localStorage sessionStorage 。

localStorage

localstorage是一种没有时间限制的数据存储方式,可以将数据保存在客户端的硬盘或其他存储 器,存储时间可以是一天,两天,几周或几年。浏览器的关闭并不意味着数据也会随之消失。当 再次打开浏览器时,我们依然可以访问这些数据。localStorage用于持久化的本地存储,除非主 动删除数据,否则数据是永远不会过期的。

sessionStorage

sessionStorage指的是针对一个session的数据存储,即将数据保存在session对象中。Web中的 session指的是用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间,可以称为 用户和浏览器进行交互的"会话时间"。session对象用来保存这个时间段内所有要保存的数据。当 用户关闭浏览器后,这些数据会被删除。

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面 才能访问,并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存 储,仅仅是会话级别的存储。

从上面的介绍我们可以看出,localStorage可以永久保存数据,而sessionStorage只能暂时保存 数据,这是两者之间的重要区别,在具体使用时应该注意。

Web Storage存储机制比传统的Cookie更加强大,弥补了Cookie诸多缺点,主要在以下几个方面 做了加强:

  • Web Storage提供了易于使用的API接口,只需要设置键值对即可使用,简单方便

・在存储容量方面可以根据用户分配的磁盘配额进行存储,能够在每个用户域存储5MB 10MB的内容。用户不仅可以存储session,还可以存储许多信息,如设置偏好,本地化的数 据和离线数据等。

  • Web Storage还提供了使用J avaScript编程的接口,开发者可以使用J avaScript客户端脚本实

现许多以前只能在服务器端才能完成的工作。

14-1-3 使用 Web Storage

如果浏览器支持Web Storage API,那么window对象中就会有localstorage和sessionstorage 个属性。这个属性是一个原生对象,带有很多用于存储数据的属性和方法。信息是以键值对的形 式存储,值只能是字符串。

存储示例:我们可以通过setItem()方法来存储一个值,然后通过getItem()方法来获取值

在1.html里面设置localstorage的值

<body> <script> localStorage.setItem("name","xiejie");

console.log("信息已保存!");

</script>

</body>

接下来在2.htm l里面来获取已经设置了的值

<body> <script> let name = localStorage.getItem("name");

console.log(' 姓名为 ${name}');//姓名为 xiejie

</script>

</body>

这里,我们存储的值是存放于本地的,所以没有时间的限制,即使我们关闭浏览器,设置了的值 也依然存在。除了上面使用getItem()和setItem()来存取数据以外,我们还可以直接进行如 下的存值和取值操作,就好像是给一个属性赋值一样,如下:

在1.html里面设置localstorage的值

<body> <script> localStorage.setItem("name","xiejie");

localStorage.age = 18; console.log("信息已保存!");

</script>

</body>

接下来在2.htm I里面来获取已经设置了的值

<body>

<script>

let name = localStorage.getItem("name");

let age = localStorage.age;

console.log(' 姓名为 ${name},年龄为 ${age}'); //姓名为xiejie,年龄为18

</script>

</body>

如果要删除本地存储中的一个条目,可以使用r emoveItem()方法或者直接使用delete运算 符,如下:

localStorage.removeItem("name");

//或者

delete localStorage.name

如果要彻底删除本地存储中所有的东西,可以使用clea r()方法,如下:

localStorage.clear()

14-1-4 storage 事件

每次将一个值存储到本地存储时,就会触发一个storage事件。由事件监听器发送给回调函数的 事件对象有几个自动填充的属性如下:

・key:告诉我们被修改的条目的键

  • newValue:告诉我们被修改后的新值
  • oldValue:告诉我们修改前的值
  • storageArea:告诉我们是本地存储还是会话存储

・url:被改变键的文档地址

需要注意的是,这个事件只在同一域下的任何窗口或者标签上触发,并且只在被存储的条目改变 时触发。

示例如下:这里我们需要打开服务器进行演示,本地文件无法触发storage事件

  1. html代码如下:在该页面下我们设置了两个localstorage并存储了两个值

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8"> <title>Document</title>

</head>

<body>

<script> localStorage.name = "xiejie"; localStorage.age = 20;

console.log(“信息已经设置!");

</script>

</body>

</html>

  1. html代码如下:在该页面中我们安装了一个storage的事件监听器,安装之后只要是同一域下面 的其他storage值发生改变,该页面下面的storage事件就会被触发

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8"> <title>Document</title>

</head>

<body>

<script>

let name = localStorage.getItem("name");

let age = localStorage.age; console.log(' 姓名为 ${name},年龄为 ${age}'); window.addEventListener("storage",(e)=>{ console.log('${e.key} ${e.oldValue}修改为 ${e.newValue}'); console.log(' 这是一个 ${e.sto rageA rea}存储'); console.log(' 被改变的 url ${e.u rl}');

},true);

</script>

</body>

</html>

接下来我们来改变1.html里面localStorage.name的值

localSto rage.name ="谢杰";

之后我们就会看到安装在2.html页面里面的storage事件就会被触发,显示出如下效果:
name从xiej ie修改为谢杰

这是一个object Storage]存储

被改变的 u r I httD //localhost/l, html

最后,需要说明一下的就是虽然Web Storage只能存储字符串看起来限制很大,但是通过使用 JSON,我们可以在本地存储中存储任何的JSON对象,如下:

let xiejie = {"name":"xiejie","age":18}; localStorage.setItem("info",JSON.stringify(xiejie));

这段代码会将xiejie这个对象存储为以info作为键的一个JSON字符串,当我们要将其取出来使用 的时候,只需要再使用JSON.pa rse方法将其转换回JSO N对象即可

xiejie = JSON.parse(localStorage.info);

原文地址:https://www.cnblogs.com/jrzqdlgdx/p/11239709.html