HTML5高级程序设计

1.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

2.HTML5新的DOCTYPE和字符集

  • <!DOCTYPE html>
  • <meta charset='utf-8'>

使用HTML5的DOCTYPE会触发浏览器以标准兼容模式显示页面。众所周知,Web页面有多种显示模式,比如怪异模式、近标准模式以及标准模式。其中标准模式也被称为非怪异模式。浏览器会根据DOCTYPE来识别应该使用哪种模式,以及使用什么规则来验证页面。在怪异模式下,浏览器会尽量不中断页面显示,即使没有完全通过验证也会将其显示出来。

3.新元素和旧元素

内容类型 描述
内嵌 向文档中添加其他类型的内容,例如audio、video、canvas和iframe等
在文档和应用的body中使用的元素,form、h1和small等
标题 h1、h2和hgroup等
交互 与用户交互的内容,例如音频和视频的控件、button和textarea等
元数据 通常出现在页面的head中,设置页面其他部分的表现和行为,例如script、style和title等
短语 文本和文本标记元素,mark、kbd、sub和sup等
片段 用于定义页面片段的元素,article、aside和title等

4.语义化标记

元素名 描述
header 标记头
footer 标记脚部区域
section Web页面中的一块区域
article 独立的文章内容
aside 相关内容或者引文
nav 导航类辅助内容

5.使用Selecors API简化选取操作

函数 描述 示例 结果
querySelector() 根据指定的选择规则,返回在页面中找到的第一个匹配元素 querySelector("input.error") 返回第一个CSS类名为"error"的文本输入框
querySelectorAll() 根据指定规则返回页面中所有相匹配的元素 querySelectorAll("#results td") 返回id值为results的元素下所有的单元格

可以为Selectors API函数同时指定多个选择规则,例如:
//选择文档中类名为highClass或lowClass的第一个元素
var x = document.querySelector(".highClass", ".lowClass");

提示:Selectors API不仅仅只是方便,在遍历DOM的时候,Selectors API通常会比以前的子节点搜索API更快。为了实现快速样式表,浏览器对选择器匹配进行了高度优化。

6.判断浏览器是否支持canvas

document.createElement("canvas").getContext("2d");

检查浏览器canvas是否有getContext属性

7.canvas使用

function drawDiagonal() {
    //取得canvas元素及其绘图上下文
    var canvas = document.getElementById("diagonal");
    var context = canvas.getContext("2d");

    //用绝对坐标来创建一条路径
    context.beginPath();
    context.moveTo(70, 140);
    context.lineTo(140, 70);

    //将这条线绘制到canvas上
    context.stroke();
}

window.addEventListener("load", drawDiagonal, true);
  • 首先通过引用特定的canvasID值来获取对canvas对象的访问权。接着定义一个context变量,调用canvas对象的getContext方法,并传入希望使用的canvas类型。代码中通过传入“2d”来获取一个二维上下文。
  • 接下来,基于这个上下文执行画线的操作。在代码中,调用了三个方法——beginPath、moveTo和lineTo,传入了这条线的起点和终点的坐标。
  • 方法moveTo和lineTo实际上并不画线,而是在结束canvas操作的时候,通过调用context.stroke()方法完成线条的绘制。

8.使用HTML Geolocation API

检查浏览器支持性

function loadDemo() {
    if (navigator.geolocation) {
        alert("支持定位!")
    }
}

9.跨文档消息通信

跨文档消息通信可以确保iframe、标签页、窗口间安全地进行跨源通信。它把postMessage API定义为发送消息的标准方式。利用postMessage发送消息非常简单,代码如下所示:chatFrame.contentWindow.postMessage('Hello, world', 'http://www.example.com/');

接收消息时仅需在页面中增加一个事件处理函数。当某个消息到达时,通过检查消息的来源来决定是否对这条消息进行处理。

//消息事件监听器
window.addEventListener("message", messageHandler, true);
function messageHandler(e) {
    switch (e.origin) {
        case "friend.example.com":
            //处理消息
            processMessage(e.data);
            break;
        default:
        //消息来源无法识别
        //消息被忽略
    }
}

在调用postMessage前,应该首先检测浏览器是否支持它:

if (typeof window.postMessage == undefined) {
    alert("该浏览器不支持postMessage");
}
window.postMessage('Hello, world', 'http://www.example.com/');

第一个参数包含要发送的数据,第二个参数是消息传送的目的地。要发送消息给iframe,可以在相应iframe的contentWindow中调用postMessage,代码如下:

document.getElementsByTagName('iframe')[0].contentWindow.postMessage("Hello, World", "chat.example.net");

监听消息事件并通过白名单鉴定源:

var originWhiteList = ["XXX.com", "WWW.com"];
function checkWhiteList(origin) {
    for (var i = 0; i < originWhiteList.length; i++) {
        if (origin === originWhiteList[i]) {
            return true;
        }
    }
    return false;
}

function messageHandler(e) {
    if (checkWhiteList(e.origin)) {

    } else {
        
    }
}

10.XMLHttpRequest Level 2

作为XMLHttpRequest的改进版,XMLHttpRequest Level2在功能上有了很大的改进。主要集中在一下两个方面:

  • 跨源XMLHttpRequest;
  • 进度事件

跨源XMLHttpRequest

过去,XMLHttpRequest仅限于同源通信。XMLHttpRequest Level2通过CORS(Cross Origin Resource Sharing,跨源资源共享)实现了跨源XMLHttpRequest。

跨源HTTP请求包括了一个Origin头部,它为服务器提供HTTP请求的源信息。头部由浏览器保护,不能被应用程序代码更改。

进度事件

XMLHttpRequest Level2用了一个有意义的名字Progess进度来命名进度事件。

  • loadstart
  • progress
  • abort
  • error
  • load
  • loadend

11.WebSockets API

HTML5 WebSockets是HTML5中最强大的通信功能,它定义了一个全双工通信信道,仅通过Web上的一个Socket即可进行实时通信。WebSocketss不仅仅是对常规HTTP通信的另一种增量加强,它更代表着一次巨大的进步,对实时的、事件驱动的Web应用程序而言更是如此。
  • 目前实时Web应用的实现方式,大部分是围绕轮询和其他服务器端推送技术展开的,其中最著名的是Comet。Comet技术可以让服务器端主动以异步方式向客户端推送数据,它会使针对传输消息到客户端的相应延迟完成。
  • 使用轮询时,浏览器会定期发送HTTP请求,并随即接收响应。
  • 使用长轮询时,浏览器向服务器发送一个请求,服务器会在一段时间内将其保持在打开状态。如果服务器在此期间收到一个通知,就会向客户端发送一个包含消息的响应。如果时间已到却还没接收到通知,服务器会发送一个响应消息来终止打开的请求。
  • 使用流解决方案时,浏览器会发送一个完整的HTTP请求,但服务器会发送并保持一个处于打开状态的响应,该响应持续更新并无限期处于打开状态。每当有消息可发送时该响应就会被更新,但服务器永远不会发出响应完成的信号,这样连接就会一致保持在打开状态以便后续消息的发送。但是,由于流仍然是封装在HTTP中,其间的防火墙和代理服务器可能会对响应消息进行缓冲,造成消息传递的时延。因此,当检测到缓冲代理服务器时,许多流解决方案就回退到长轮询方式。

12.Web Workers API

HTML5 Web Workers可以让Web应用程序具备后台处理能力。它对多线程的支持性非常好,因此,使用了HTML5的JavaScript应用程序可以充分利用多核CPU带来的优势。

如果Web开发人员创建的Web应用程序需要执行一些后台数据处理,但又不希望这些数据处理任务影响Web页面本身的交互性,那么可以通过Web Workers生成一个Web Worker去执行数据处理任务,同时添加一个事件监听器区监听它发出的信息。

13.使用HTML5离线Web应用API

检查浏览器支持情况

if(window.applicationCache){
    //浏览器支持离线应用
}

搭建简单的离线应用程序

假设开发人员希望搭建一个包含HTML文档、样式表和JS文件的单页应用程序,同时要为这个HTML5应用程序添加离线支持,那么可以在html元素中加入manifest特性:

<!DOCTYPE html>
<html manifest="application.manifest">
...
</html>

缓存清单文件内容示例

CACHE MANIFEST
example.html
example.js
example.css
example.gif

检查在线状态

//页面加载的时候,设置状态为online或offline
function loadDemo(){
    if(navigator.online){

    }
}

//添加事件监听器,在线状态发生变化时,触发相应动作
window.addEventListener("online", function(e){
    
},true);

window.addEventListener("offline", function(e){

},true);

猜你喜欢

转载自www.cnblogs.com/jlfw/p/12939884.html
今日推荐