探秘IE8 JavaScript功能超乎想象

开发 前端
IE 7在CSS编程方面的改进给很多开发者带来了耳目一新的感觉,但是在JavaScript方面的表现却不敢恭维,然而微软在IE 8上做了很大的改变,JavaScript已经成为其开发的一个重点。

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

51CTO推荐阅读:Firefox和IE之间7个JavaScript差异

W3C:querySelector

IE8开始支持一些新的W3C规格,其中多了querySelector和querySelectorAll两个函数。querySelector是CSS selector的查找原理的一种快速实现方法。IE 8是第二个实现Selectors API的浏览器(另一个浏览器是WebKit)。简单来说,它实现的就是jQuery里令人惊艳的CSS Selector功能。例如以下的范例:(只有IE8可以跑,FF、IE7都会发生错误)。

  1. <html> 
  2. <body> 
  3. <div><div><span>InnerSpan</span></div></div> 
  4. <div><span class="myClass">ClassSpan</span></div> 
  5. <script type="text/javascript"> 
  6. .innerHTML);  
  7. .innerHTML);  
  8. </script> 
  9. </body> 
  10. </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团队已经进行了一些重大的改进,这些改进对我们很多应用的开发都意义重大。

尽管如此,我还是要纠正一点。尽管IE8对于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团队从测试者那儿收集反馈信息,然后将漏洞发布到一个公开访问的网站上。这是微软非常明智的一个进步。用户可以从这儿看到微软对漏洞的改进信息。

结论

总体来说,尽管IE8也有自己的缺点,我还是对这个新版IE浏览器持肯定看法。类似querySelector、ARIA和postMessage等功能对开发者都非常有帮助。对于那些不足之处,例如没有新的JavaScript功能,没有W3C事件支持,没有CSS3 Selectors,我认为将在未来的版本中会有所改进。

【编辑推荐】

  1. Firefox和IE之间7个JavaScript差异
  2. JavaScript跨浏览器兼容测试三步走
  3. IE中JavaScript DOM ready应用技巧
  4. JavaScript在IE和FireFox中的不同表现
  5. JavaScript解决常见浏览器兼容问题
责任编辑:王晓东 来源: IT168
相关推荐

2009-03-30 09:07:22

微软浏览器IE8

2009-03-30 09:08:40

微软浏览器IE8

2010-10-08 16:42:41

JavaScriptIE8

2011-03-08 11:14:35

IE7、IE8、IE

2010-08-19 10:56:55

JSIE6IE7

2009-04-23 09:05:08

IE8llq自定义功能

2016-10-13 13:43:04

WebPGoogleJPEG和PNG格式

2009-03-22 09:59:43

微软IE8浏览器

2010-08-19 15:24:52

IE6IE7IE8

2009-05-06 09:02:48

微软Windows 7操作系统

2010-08-17 16:50:30

JSIE6IE8

2010-03-15 10:06:45

IE8Javascript

2010-08-18 10:48:56

IE8IE7

2009-03-30 09:09:47

微软浏览器IE8

2011-02-14 14:21:10

IE9IE8Chrome

2012-05-04 08:45:23

IE8

2009-02-19 08:52:41

IE8Windows 7发布日期

2009-04-16 08:29:03

IE8自定义功能浏览器

2009-05-05 08:58:35

IE8微软浏览器

2009-03-29 10:02:31

IE8浏览器微软
点赞
收藏

51CTO技术栈公众号