过去,不少功能只能经过插件或者复杂的 hack(本地绘图 API、本地 socket 等)来实现,但在 HTML5 中提供了对这些功能的原生支持。插件的方式存在不少问题:html
插件安装可能失败;html5
插件能够被禁用或屏蔽(例如 Apple 的 iPad 就不支持 Flash 插件);编程
插件自身会成为被攻击的对象;canvas
插件不容易与 HTML 文档的其余部分集成(由于插件边界、剪裁和透明度问题)。浏览器
虽然一些插件的安装率很高,但在控制严格的公司内部网络环境中常常会被封锁。此外,因为插件常常还会给用户带来烦人的广告,一些用户也会选择屏蔽此类插件。这样的话,一旦用户禁用了插件,就意味着依赖该插件显示的内容也没法表现出来了。网络
在已经设计好的页面中,要想把插件显示的内容与页面上其余元素集成也比较困难,由于会引发剪裁和透明度等问题。插件使用的是自带的渲染模型,与普通 Web 页面所使用的不同,因此当弹出菜单或者其余可视化元素与插件重叠时,会特别麻烦。此时,HTML5 却能够站出来,挥舞着它的原生功能魔棒,对这类问题笑而不语,它能够直接用 CSS 和 JavaScript 的方式控制页面布局。实际上这是 HTML5 的最大亮点,显示了先前任何 HTML 版本都不具有的强大能力。HTML5 不只仅是提供新元素支持新功能,更重要的是添加了对脚本和布局之间的原生交互能力,基于此,咱们能够实现之前不能实现的效果。socket
以 HTML5 中的 canvas 元素为例,有不少很是底层的事情之前是没办法作到的(好比在HTML4 的页面中就难画出对角线),而有了 canvas 就能够很轻易地实现了。更为重要的是新API 释放出来的潜能,以及经过寥寥几行 CSS 代码就能完成布局的能力。基于 HTML5 的各种API 的优秀设计,咱们能够轻松地对它们进行组合应用。好比,从 video 元素中抓取的帧能够显示在 canvas 里面,用户点击canvas 便可播放这帧对应的视频文件。这只是一个使用原生方法实现插件功能的示例。其实,当工做再也不基于黑盒后,开发反而会变得更简单。HTML5 的不一样功能组合应用为 Web 开发注入了一股强大的新生力量,这也是咱们为何决定写一本关于HTML5 编程的书,而不仅仅是介绍那些新元素的缘由。ide
HTML5 包括什么,不包括什么工具
那么,HTML5 到底包括些什么?仔细阅读过规范的读者,可能会发现本书中讲解的不少功能其实在规范中是没有的。例如,Geolocation 和 Web Workers 就不在规范中。那为何还要将它们归入本书的讨论范围呢?炒做?固然不是!布局
不少 HTML5 的研究成果(如 Web Storage 和 Canvas 2D)起初都是 HTML5 规范的一部分,后来移出来列入了单独的规范中,这么作是为了让 HTML5 规范更好地突出重点。在成为官方规范以前,先单列出来进行讨论和编辑不失为一个好办法。这样的话,即便存在争议,也不会影响到整个规范。
在讨论某个功能的时候,特定领域的专家可经过邮件列表的方式共同探讨,不会由于喋喋不休而引发激辩。业界仍然倾向于把原始功能集都视为 HTML5,其中包括 Geolocation。这样的话,HTML5 不只涵盖了核心的标记元素,同时也能够包括不少很酷的新 API。写这本书的时候,下面这些功能也属于 HTML5:
Canvas(2D 和 3D)
Channel 消息传送
Cross-document 消息传送
Geolocation
MathML
Microdata
Server-Sent Events
Scalable Vector Graphics (SVG)
WebSocket API 及协议
Web Origin Concept
Web Storage
Web SQL database
Web Workers
XMLHttpRequest Level 2
能够看到本书中所讨论到的 API 大多都在上面的列表中。为何选择这些 API 呢?咱们挑选的都是基本成熟的功能,也就是说这些功能已经获得了不止一种浏览器的支持,其余功能(不太成熟的)可能只在个别浏览器的某个 beta 版中可用,或者基本上只是个概念。
对于咱们要讨论的 HTML5 功能,本书将提供各类浏览器的最新支持状况。不过,无论如今支持状况如何,不久的未来确定会变,由于 HTML5 发展的速度很是快。不用担忧,咱们会推荐一些很是好的在线资源,用以查看当前(以及未来)浏览器的支持状况。www.caniuse.com网站按 照 浏 览 器 的 版 本 提 供 了 详 尽 的 HTML5 功 能 支 持 情 况 。 若 用 户 通 过 浏 览 器 访 问www.html5test.com的话,该网站会直接显示用户浏览器对 HTML5 规范的支持状况。
此外,本书的重点不是讨论使用某种模拟或者变通的方法让 HTML5 程序可以运行在旧浏览器上,而是着重关注 HTML5 规范自己,以及它的使用方法。也就是说,在本书中咱们针对所讨论的每一个 API 都会提供一些示例代码,开发人员能够直接拿来检测其可用性。由于检测用户代理的方式常常不可靠,因此咱们使用特性检测。固然,还可使用 Modernizr —— 一个 JavaScript库,它提供了很是先进的 HTML5 和 CSS3 检测功能。咱们强烈推荐使用 Modernizr,由于它是检测浏览器是否支持某些特性的最佳工具。
对于 HTML 多说几句 |
“ 你们好,我是 Frank①,我喜欢画画。
我见过的第一个 HTML canvas 演示是一款简单的绘图程序,用户界面模仿的是微软的画图程序。尽管那落后于数码绘图几十年,而且当时只有个别浏览器支持,不过它却让我对其表现能力充满了期待。
当我开始数码绘图的时候,通常都使用安装在本地的桌面软件。不能否认,有些软件至关不错,但它们不具有 Web 应用的迷人特性。简而言之,这些软件都是离线的。想要共享数码做品,必须先从软件中将图像导出,而后上传至 Web。可是在 Web 的实时画布上协做讨论的话就不存在这种问题了。HTML5 应用能够省掉如今数码绘图流程中的导出环节,将整个创做过程都转移到线上,直至做品完成。
不能用 HTML5 实现的应用已经变得愈来愈少了。对于文本,Web 已然成为双向沟通的理想媒介。经过全 Web 的方式处理文本的应用程序比比皆是,而相似绘图、视频编辑、3D 建模等图形类程序才刚刚起步。如今,咱们已经开发出了许多功能强大的单机软件,用以建立和欣赏图片、音乐、电影等。
更进一步,咱们能够将这些软件移植到 Web 这个功能强大、无处不在的在线平台上。”
——Frank