当前位置:首页 » 网站技术 » JavaScript

IE8的强大JavaScript功能探秘

...

IE 7在CSS编程方面的改进给很多开发者带来了耳目一新的感觉,但是在JavaScript方面的表现却不敢恭维,实际上,在这方面我们看到的只是一些新的BUG。不过幸运是,微软已经看到了这一点,在IE 8中,JavaScript已经成为其开发的一个重点,下面我们就一起从开发者角度来看一下IE 8的一些特点。

IE8开始支持一些新的W3C规格,其中多了querySelector和querySelectorAll两个函数。querySelector是CSS selector的查找原理的一种快速实现方法。IE 8是第二个实现Selectors API的浏览器(另一个浏览器是WebKit)。

简单来说,它实现的就是jQuery里令人惊艳的CSS Selector功能。例如以下的范例:(只有IE8可以跑,FF、IE7都会发生错误)

<html><body>
<div><div><span>InnerSpan</span></div></div>
<div><span class="myClass">ClassSpan</span></div>
<script type="text/javascript">
    alert(document.querySelector("div div span").innerHTML);
    alert(document.querySelector("span.myClass").innerHTML);
</script>
</body></html>

这儿需要特别指出的是,任何Selectors要完全依靠浏览器的原生selector实现。IE8支持CSS2.1,因此开发者无需再等待CSS 3 selectors的推出。

支持更多HTML 5功能

我一直希望在IE 8中增加一些HTML 5兼容功能,在IE 8中我们看到了4个在这方面的完整功能,非常棒!

1、HTML 5: window.location.hash

这个功能已经被多数浏览器支持的非常好。在IE8标准模式中将window.location.hash中的更改作为导航,并保存先前文档的URL,可以像在Ajax应用中模仿“后退”按钮效果。IE8中对它进行了改良,可以广播这个hashchanged时间,据我所知这是第一个采取这种处理方法的浏览器。

2、HTML 5: DOM存储

通过这个功能,数据可以持续保存在本地,它将取代原始的cookie存储机制。我们已经在2.0版本以后的Firefox浏览器中看到过这个功能,但是在Opera和Safari中尚未支持此功能。

3、HTML 5: postMessage

IE8现在支持跨文件消息通讯(Cross-Document Messaging-XDM)!通过onmessage事件和postMessage方法,两个来自不同域的网页可以进行通讯。

目前IE 8、Opera 9、Firefox 3和WebKit nightlies版均支持这个功能,也就是说,该功能几乎已被所有最新浏览器支持。

4、HTML 5: Offline Events

在IE 8中拥有一些离线事件来检测网络的中断,通过它我们可以编写精彩的离线Ajax应用。目前来看支持这一功能的浏览器包括Firefox 3和IE 8。

IE8引入XDomainRequest跨站数据获取功能

这是一个非常有趣的进行跨站数据获取的功能,不过它与Firefox 3中的跨站 XMLHttpRequest的工作原理不太一样。它的跨域并不是无限制的。需要服务端返回http header中带有XDomainRequestAllowed=1才可以跨域,否则是不成功的。

XMLRequest 不能跨站一直都是多子域服务器的硬伤。使得很多情况不得不考虑最原始的动态script和JSON的方式。不过IE8团队有意解决跨站访问数据的问题,这是IE8的一个进步。

另外,IE8下的XMLHttpRequest增加了一个很重要的属性 timeout和ontimeout方法,它在对程序进行优化时极其重要。

DOM漏洞修补

在IE 8中getAttribute/setAttribute已经进行了重大改进。简单来说,它们现在已经可以完成属于自己的任务,IE8和和其它浏览器在这方面的差距已经不大。臭名昭著的accessing relative/absolute href/src属性问题也已经得到解决,这是一个很大的进步。另外它们还增加了hasAttribute功能。

其它新增和修复包括:

•.ownerElement和.ownerDocument。我们现在终于有了一个统一的方法来处理子框架。

•getElementById可以通过id来返回对象。这是一个我们期盼已久的功能。

•getAttribute("checked") 现在返回“checked”而不是true。

•动态创建(或修改)的单选按钮现在可以被选择了。

对于这些修复我感到即高兴又生气,高兴的是微软终于对它们做出了正确的修改,生气的则是微软花了这么长时间才做出正确的修改。

W3C:事件

这个功能是IE 8目前版本完全缺失的一个部分。我们依然需要继续使用IE的attachEvent系统,还看不到addEventListener的到来。我不确认这个功能的缺失对于IE 8的Acid3支持将带来多大的影响,不过在Acid3中已经包含了对addEventListener的测试,因此微软可能已经开始考虑增加对它的支持。

从某种程度上我可以理解微软希望保留自己现有API的心情,但是我不能理解它们为什么没有兴趣也增加对addEventListener的支持。我猜测理由可能是微软不得不支持像事件捕获之类的概念。

对于这一点我感到非常失望。我认为这是下一个版本中急需修正的一个地方。

JavaScript语言

在完善垃圾收集、内存管理和性能等问题上,IE团队已经进行了一些重大的改进,这些改进对我们很多应用的开发都意义重大。

尽管如此,我还是要纠正一点。尽管IE 8对于JavaScript开发者来说是非常伟大的一个浏览器,但如果更准确的说,高兴的或许只是“JavaScript+DOM”开发者。单就JavaScript来说,IE 8却比较令人失望:在这个版本的浏览器中并没有出现任何新的纯正JavaScript功能。我只能寄望于在下一个版本中增加更多的改进了。

ARIA支持

这是一个让我感到非常满意的变化。ARIA是一个非常了不起的规范,可以让Web应用有能力与读者进行清晰的交流。在此之前IE缺乏对它的支持,不过现在这一缺陷已经在IE 8中得到弥补。目前Firefox、IE和Opera已经都支持ARIA。WebKit团队似乎还没有兴趣支持这一功能,实在是令人感到不可理解。

嵌入式SVG

目前在IE 8已经增加了对嵌入式命名元素的支持。这意味着你可以对SVG和Methyl进行内联标记,从这一点上来看,IE浏览器将来有望增加对SVG的原生支持。

IE Web Developer:IE版的Firebug

在IE浏览器中我们终于看到了这个类似Firebug的工具,用Firebug创建者Joe Hewitt的原话来说:“我非常高兴微软在IE8中完全复制了Firebug的功能。”我不得不承认,类似的工具已经存在了很长时间,而且深受开发者欢迎。

IE Web Developer可以让你检查和编辑你的HTML DOM,显示错误信息、日志信息,显示网站源代码,监视DHTML事件和HTTP流量。

浏览模式切换

乍一看,由于这个功能的存在,你可以看一下你的IE 7网页是否能在IE 8中显示,实际上它的真正用途在于,开发者可以开发一个标准兼容的网页(IE8、Firefox、Safari和Opera),然后查看在IE 7中的显示效果。对于开发者来说,这是一个非常有用的功能,因为我们无需再借助于虚拟机中的其它版本IE浏览器来测试网页效果。

Bug回馈

IE团队从测试者那儿收集反馈信息,然后将漏洞发布到一个公开访问的网站上。这是微软非常明智的一个进步。用户可以从这儿看到微软对漏洞的改进信息。

结论

总体来说,尽管IE 8也有自己的缺点,我还是对这个新版IE浏览器持肯定看法。类似querySelector、ARIA和postMessage等功能对开发者都非常有帮助。

对于那些不足之处,例如没有新的JavaScript功能,没有W3C事件支持,没有CSS3 Selectors,我认为将在未来的版本中会有所改进。

如果微软IE团队能够继续按照这个正确的方向走下去,我想IE浏览器留给我们的不再是仅仅有失望。

继续阅读
微软证实所有版本IE均存有新漏洞
XMLHttpRequest对象全面剖析
简单的级联下拉菜单兼容Firefox和IE
常用网页特效中级篇
常用网页特效高级篇
浏览器厂商加快本土转型 增加通用网址支持
Ajax框架jQuery发布1.3新版 改进核心代码
Opera推出了新的JavaScript引擎Carakan
微软IE8浏览器正式发布
发表评论

昵称:
最新评论
暂时没有评论!