HTML5 & CSS3初学者指南(3) – HTML5新特性

介绍

本文介绍了 HTML5 的一些新特性。主要包含以下几个方面:

  • Web 存储
  • 地理位置
  • 拖放
  • 服务器发送事件

Web存储

HTML5 Web 存储的设计与构想是一个更好的机制来存储客户端的网络数据。它是通过一个网络浏览器作为客户端数据库实现的,它允许网页以键值对的形式来存储数据。

它具有以下特征:

  • 每个原始网站/域最多可存储 5MB 的数据。
  • 你可以通过属性和方法来使用 JavaScript 操作 web 存储器中的数据实现访问。
  • 就像 cookies,你可以选择将保持数据(维持),即使你已经离开了该网站,关闭了浏览器选项卡,退出了浏览器或关闭了计算机。
  • 不像 cookies 这种由服务器端脚本创建的,web存储是由客户端脚本如 JavaScript 创建。
  • 不像 cookies,web 存储中的数据不会自动伴随服务器端每一次 HTTP 请求。
  • Web 存储在主流的 Web 浏览器中都是原生支持的,如 Chrome,Opera,Firefox,Safari 和 IE8 +。换句话说,不需要第三方插件。

网络存储提供了2种不同的存储区域- 会话存储和本地存储 –它们在范围和时限有所不同,需要在不同情况下使用。

会话存储

会话存储,数据以字符串的形式进行存储,只会持续在当前的会话。当浏览器窗口关闭时,数据将会被删除。会话存储是专门用于同一个用户在不同的浏览器中使用相同的网站同时进行多个事务的情况。每一个浏览器窗口中的事务会获取它们自己会话存储的备份,这些会话备份是和其它浏览器窗口中的另一个事务不同的。当用户关闭浏览器窗口时,隶属于这个窗口的会话存储数据将会继续存在。以这种方式,事务数据不会从一个浏览器窗口泄露到另一个窗口。会话存储就是cookies确定的解决方案,正如 HTML5 Web存储规格 陈述的:

引用:

“如果用户使用相同的站点在两个不同的窗口购买了飞机票。如果站点使用 Cookie 来跟踪用户已购买的票据,则当用户从两个窗口点击页面跳转时,当前正在购买的票将会从一个窗口“泄漏”到另一个,从而可能导致用户在没意识到的情况下,为同一个航班够买了两张票。

会话存储必须用于处理机密和敏感信息的网络活动,如信用卡号码,社会保险号码和登录证书。这些信息很容易受到“DNS欺骗”的攻击,所以不应该存储超过一个单个会话。”

如何创建并访问一个 sessionStorage:

<script type="text/javascript">sessionStorage.lastname="Smith";

document.write(sessionStorage.lastname);</script>

本地存储

本地存储,数据以字符串的形式进行存储,并且会一直持续下去(除非你明确地删除它)。即使浏览器窗口关闭了数据也会一直存在,同时如果接下来对相同 origin 的访问使用的是相同的浏览器,那么数据也是可用的。本地存储是专为存储跨越多个浏览器窗口和持续的时间超过当前会话的数据。

不像桌面系统,Web 应用程序一直缺乏离线工作的能力。现在不一样了,HTML5 本地存储的出现,已经使脱机工作成为了可能。试想一下你正在填写一份多页的 Web 表单,或者撰写一篇文章时,截止日期已经迫在眉睫,突然发生网络故障中断。你将会失去你精心创建的所有数据。因为有了本地存储,你就可以继续离线工作,而 Web 应用程序会使用一些客户端脚本如 JavaScript 间歇性地将你的工作保存到本地存储。

一个网站可以让用户自定义网页的主题和布局,并在本地存储中保存这些设置。以这种方式,用户可以在后续访问中看到自己个人的网页。

如何创建和访问 localStorage:

<script type="text/javascript">localStorage.lastname="Smith";

document.write(localStorage.lastname);</script>

地理定位

HTML geolocation API 只有一个对象,就是 navigator.geolocation 对象。你可以将 navigator.geolocation 比作浏览器中的指南针。浏览器是否支持这个 API,还有待确认。你可以通过将以下的 if-else 写入到自己的代码中,来检测浏览器是否支持。

// Check whether browser supports Geolocation API or notif (navigator.geolocation) // Supported{    // place the geolocation code here}else // Not supported{
    alert("Oop! This browser does not support HTML5 Geolocation.");
}

navigator.geolocation 对象公开了3中方法 getCurrentPosition(),watchPosition(),和clearWatch()。

  • getCurrentPosition()

getCurrentPosition()方法用来获得用户的当前位置。

navigator.geolocation.getCurrentPosition(getPosition);
  • watchPosition()

watchPosition()方法与 getCurrentPosition()方法是几乎相同的。它们都返回当前位置信息并具有相同的方法签名 - 一个成功的回调函数,一个错误的回调函数和一个位置选项对象。唯一的区别在于, 一旦激活了点击按钮,getCurrentPosition()方法会返回位置信息;而 watchPosition()方法将继续获得位置信息,一旦用户设备的位置发生变化并在初始话激活之后。

该 watchPosition()方法会返回一个 watch ID,当不再需要获取位置时,可以用 watch ID 来停止 watchPositon()方法。

  • clearWatch()

clearWatch()方法以 watchPosition()方法的 watch ID 作为参数,用于停止执行 watchPosition()方法。

拖放

我们已经很熟悉拖放电脑桌面上的文件、文件夹和图标了。拖放是一种任何的桌面应用具有的强有力的也是理所当然应该具备的用户交互。使用像鼠标这样的指针设备,通过拖放来实现拷贝,插入和删除任何电脑桌面上的文件和对象。

HTML5 Drag and Drop API 提供了对浏览器拖放操作原生的支持,使得代码实现拖放变得更容易。

  • 设置元素为可拖放

首先,为了使元素可拖动,把 draggable 属性设置为 true :

<img draggable="true" />

  • 拖动什么

然后,规定当元素被拖动时,会发生什么。

在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

dataTransfer.setData( ) 方法设置被拖数据的数据类型和值:

function drag(ev)
{
    ev.dataTransfer.setData("Text",ev.target.id);
}
  • 放到何处

ondragover 事件规定在何处放置被拖动的数据。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:

event.preventDefault()
  • 进行放置

当放置被拖数据时,会发生 drop 事件。

在上面的例子中,ondrop 属性调用了一个函数,drop(event):

function drop(ev)
{
    ev.preventDefault();    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}

服务器发送事件

传统的用户和网站之间的交互模式是用户发起的请求和应答类型。用户通过浏览器主动发起请求,并且等待服务器的应答。为了检查某个特定的网页上是否有更新,用户需要通过点击浏览器上更新/重新登录按钮来向服务器发送新的请求。换言之,服务器必须不间断的将服务器侧的更新推送出去。当信息不间断的无法预测的变化时,通过这种方式来获取一些关键的做决定的信息,就不是特别有用了。例如股票价格更新,新闻传递,天气预报等。

当信息到达时,HTML 服务器发送事件(SSE)使得服务器能够将信息发送(推送)到客户端,避免了服务器持续推送的需要。这也使得网站在不需要任何第三方插件的情况下,能够为客户端提供推送服务。

  • Server-Sent 事件 - 单向消息传递

Server-Sent 事件指的是网页自动获取来自服务器的更新。

以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。

  • 接收 Server-Sent 事件通知

EventSource 对象用于接收服务器发送事件通知:

var source=new EventSource("demo_sse.php");
source.onmessage=function(event)
{
   document.getElementById("result").innerHTML+=event.data + "<br />";
};

代码解释:

  • 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demo_sse.php")
  • 每接收到一次更新,就会发生 onmessage 事件
  • 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中
  • 检测 Server-Sent 事件支持

在上面的 TIY 实例中,我们编写了一段额外的代码来检测服务器发送事件的浏览器支持情况:

if(typeof(EventSource)!=="undefined")
{   // Yes! Server-sent events support!   // Some code.....}else{    // Sorry! No server-sent events support..}
  • 服务器端代码实例

为了让上面的例子可以运行,您还需要能够发送数据更新的服务器(比如 PHP 和 ASP)。

服务器端事件流的语法是非常简单的。把 "Content-Type" 报头设置为 "text/event-stream"。现在,您可以开始发送事件流了。

PHP 代码 (demo_sse.php):

<?phpheader(‘Content-Type: text/event-stream‘);header(‘Cache-Control: no-cache‘);$time = date(‘r‘);echo "data: The server time is: {$time}\n\n";flush();?>

ASP 代码 (VB) (demo_sse.asp):

<%Response.ContentType="text/event-stream"Response.Expires=-1Response.Write("data: " & now())
Response.Flush()%>

代码解释:

  • 把报头 "Content-Type" 设置为 "text/event-stream"
  • 规定不对页面进行缓存
  • 输出发送日期(始终以 "data: " 开头)
  • 向网页刷新输出数据

总结

本文介绍的 HTML5 一些新特性就到这里,在后面一篇文章中,我们将会学习到 HTML5 的 Canvas 知识。

HTML5 & CSS3初学者指南(3) – HTML5新特性

时间: 2024-10-13 22:28:21

HTML5 & CSS3初学者指南(3) – HTML5新特性的相关文章

HTML5&CSS3初学者指南(1) – 编写第一行代码

介绍 网络时代已经到来.现在对人们来说,每天上网冲浪已经成为一种最为常见的行为. 在网页浏览器中输入一段文本地址,就像http://www.codeproject.com,等待一下,网页就加载到浏览器窗口中.一个典型的网页是由文本.图像和链接组成的.除去内容上的差异,不同网站的网页也具有不同的外观和感受,以实现在网络上建立自己的身份品牌的目的. 如果你也曾想要了解你屏幕上的这些网页是如何被创建出并以各式各样的方式渲染的,那么这里正是你可以了解到这些知识的地方.让我们一起走进在浏览器中创建了这么多

HTML5 & CSS3 初学者指南(4) – Canvas使用

介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新的成员<canvas>标签. 什么是 Canvas? HTML5 的 Canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,你可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的方法. 创建 Canvas 元素 向 HTML5 页面添

HTML5 & CSS3初学者指南(2) – 样式化第一个网页

介绍 我们已经使用基本的 HTML 编写了一个网页.但是,写出来的 HTML 代码的网页看起来很平淡,没有吸引力. 如何改善这种很平淡的页面呢? 让我们开始使用网页的基本样式来改善页面效果,我们将会使用到 CSS 的功能. 正式开始 CSS 是层叠样式表的缩写,它是为网页添加样式的通用语言,在所有浏览器中都支持.最新的标准是 CSS3,这与早期版本完全向后兼容.CSS3 的规范是由 W3C 开发的,目前仍处于开发阶段,其最新的版本是 CSS Snapshot 2010. 打开你的文本编辑器,键入

CSS选择符、属性继承、优先级算法以及CSS3新增伪类、新特性

CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?CSS新增了哪些特性?下面我整理了一些,仅供参考. CSS 选择符: 1)      id选择器(# myid) 2)      类选择器(.myclassname) 3)      标签选择器(div, h1, p) 4)      相邻选择器(h1 + p) 5)      子选择器(ul > li) 6)      后代选择器(li a) 7)      通配符选择器( * ) 8)      属性选择器

html5+css3 权威指南阅读笔记(三)---表单及其他新增和改良元素

一.新增元素及属性 1.表单内元素的form属性. html5: <form id="testForm"> <input type=text> </form> <textarea form = testForm></textarea> 2.表单内元素的formaction属性 <form id="testForm" action="test.jsp"> <input t

iPhone X 设计适配指南 &amp; iOS 11 新特性

设计内容不能被屏幕圆角.上方传感器区域.下方返回主页指示器所遮挡. 屏幕圆角.传感器区域和主屏幕支持器 设备的圆角.传感器区域和主页指示器 iPhone X 使用屏幕边缘手势来访问主屏幕.应用切换.通知中心和控制用心. 安全区可以防止你的内容覆盖状态栏.导航栏.工具栏和标签栏. https://mp.weixin.qq.com/s/7kM8Qiha7np6_QWfduxD-A

HTML5的新特性

HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新的特殊内容元素,比如 article.footer.header.nav.section 新的表单控件,比如 calendar.date.time.email.url.search 一.html5视频: 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件.

HTML5新特性及详解

什么是HTML5:HTML5 是下一代的HTML,将成为 HTML.XHTML 以及 HTML DOM 的新标准. 为 HTML5 建立的一些规则: 新特性应该基于 HTML.CSS.DOM 以及 JavaScript. 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独立于设备 开发进程应对公众透明 HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新

面向Web Cloud的HTML5 App开发实战:Browser&amp;HTML5&amp;CSS3&amp;PhoneGap&amp;jQuery Mobile&amp; WebSocket&amp;Node.js(3天)

课程简介: 王家林老师(联系邮箱[email protected] 电话:18610086859 QQ:1740415547 微信号:18610086859) 22个HTML5主题一次性贯穿HTML5的一切技术: 一网打尽HTML5时代Device.(设备端).Browser(浏览器)和Cloud(浏览器)的所有技术: 以浏览器定制技术为基础,通晓HTML5+CSS3+PhoneGap+Web Socket +jQuery Mobile +Node.js等HTML5的六大核心技术: 最新研发的H