(整理)检测浏览器支持哪些HTML5新特性的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
检测浏览器支持哪些HTML5新特性的方法
HTML5不能说是一个全新的事物,但是大部分人对HTML5的了解还是比较少的。
(如果你想了解HTML5的话,不妨查看IE9发布的HTML5视频。
)虽然目前新版的主流浏览器,诸如IE9、Firefox4、Chrome10都已经开始支持HTML5特性了,但是目前所有浏览器对HTML5的支持事不完整的,主要是因为HTML5还处在制定过程中。
如果你想检测你的浏览器究竟支持HTML 5 的哪些特性,可以查看下面我们介绍的一种方法。
当浏览器渲染web 页面的时候,它会构造一个文档对象模型(Document Object Model,DOM)。
这是一组用于表现页面上HTML 元素的对象。
每一个元素,例如每一个<p>,每一个<div>,每一个<span> 都有不同的DOM 对象表示。
当然,也有一种全局的对象,例如window 和document,不过它们不是用来表示特定元素的。
所有的DOM 对象都有一些通用属性,也有其自己特有的属性。
支持HTML 5 特性的浏览器就会包含这种独一无二的属性。
因此,我们利用这种技术,就可以检测浏览器究竟支持哪些新特性。
在本节的后面的部分中,我们将从易到难地详细介绍这种技术。
Modernizr —— HTML 5 检测库
Modernizr 是一个开源的,基于MIT 协议的JavaScript HTML 5特性检测库。
它能够检测很多HTML 5 和CSS 3 的特性。
你可以在其主页或者这里的地址(modernizr-1.7.min.js,注意修改后缀名)中找到最新版本(当前最新版本是1.7)。
同别的JS 库一样,你应该在head 块中将其引入:
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Dive Into HTML5</title>
<scrip t src=”modernizr.min.js”></script>
</head>
<body>
…
</body>
</html>
Modernizr 会自动运行,不需要调用类似modernizr_init() 的函数。
一旦开始运行,它就会创建一个名叫Modernizr 的全局变量。
这个全局变量包含它能够检测到的新特性的布尔值。
例如,如果你的浏览器支持canvas API,那么Modernizr.canvas 就会是true;如果不支持则是false。
if (Modernizr.canvas) {
// let’s draw some shapes!
} else {
// no native canvas support available
}
canvas
HTML 5 定义了元素。
这是一个“设备独立的位图画布,可以用于渲染图表、游戏图像或者其他可视图像”。
在页面上canvas 是一块矩形区域,你可以使用javascript 语句在上面进行绘制。
HTML 5 定义了一系列绘制函数(canvas API),用于绘制形状、定义路径、创建渐变或者应用变形等。
我们可以使用上面的js 库检测canvas API。
如果你的浏览器支持canvas API,DOM 对象就可以创建一个含有getContext() 函数的元素;如果不支持则仅仅会创建一个最原始的元素,其中不包含任何canvas 所特有的属性(记得这是HTML 5 向后兼容的一种体现)。
于是,我们利用这个特性,就可以按照如下的方法检测canvas 特性
function supports_canvas() {
return !!document.createElement(’canvas’).getContex t;
}
这个函数将创建一个临时的元素,但并不会将其显示到你的页面上,所以没有人会看到它。
这个元素仅仅存在于内存中,哪里也不会去,什么也做不了,就像是静止的河流上面漂着的独木舟。
createElement(‘canvas’) 语句就是用来创建这个对象的。
然后,我们测试能不能调用getContext() 函数。
这个函数仅在支持canvas API 的浏览器中才能使用。
最后,我们用两个取非运算符!! 将getContext() 函数的返回值转换成Boolean 值。
这个函数可以用来检测是否支持大多数canvas API,包括形状、路径、渐变和填充等。
它不会检测到任何在IE9 之前版本的IE 上的模拟库(由于IE9 才能够支持canvas API,在早于IE9 的版本上有很多第三方库来在IE 上模拟canvas)。
如果你不愿意自己写函数,当然也可以使用Modernizr 来检测canvas API。
if (Modernizr.canvas) {
// let’s draw some shapes!
} else {
// no native canvas support available
}
注意,这种检测仅仅用来检测形状、路径、渐变和填充等,如果要检测是否支持文本渲染,我们需要另外的方法。
canvas text
即使浏览器支持canvas API,它也不一定支持canvas text API。
canvas text API 直到很晚的时候才被加入HTML5,因此有些浏览器实际是在canvas text API 完成之前就已经支持canvas API。
当然,我们可以使用前面说的技术检测canvas text API。
前面说过,如果浏览器支持canvas API,那么就可以创建一个表示元素的DOM 对象,并且能够调用getContext() 函数;如果不支持,则会创建一个没有任何特殊属性的普通DOM 对象。
下面我们在此基础之上来检测canvas text API。
function supports_canvas_text() {
if (!supports_canvas()) {
return false;
}
var dummy_canvas = document.createElement(’canvas’);
var conte xt = dummy_canvas.getContext(’2d’);
return typeof context.fillText == ‘function’;
}
这个函数首先调用我们前面说过的supports_canvas() 函数,来检测是否支持canvas API。
如果浏览器连canvas API 都不支持,更不用谈canvas text API 了!然后,我们创建一个临时的元素,获取其context。
这段代码一定是可以工作的,因为我们已经使用supports_canvas() 判断过了。
最后,我们检查是否存在fillText() 函数。
如果存在,则支持canvas text API。
如果不想自己写代码,那么就使用Modernizr 吧!
if (Modernizr.canvastext) {
// let’s draw some text!
} else {
// no native canvas text support available
}更多详情可访问html5中国:。