探秘IE8 JavaScript功能超乎想象

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

    W3C:querySelector

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

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

 
 
01 <html>
02 <body>
03 <div><div>
04 <span>InnerSpan</span>
05 </div></div>
06 <div>
07 <span class="myClass">ClassSpan</span></div>
08 <script type="text/java script">    alert(document.querySelector("div div span").innerHTML);    alert(document.querySelector("span.myClass").innerHTML);</script>
09 </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的支持。我猜测理由可能是微软不得不支持像事件捕获之类的概念。

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

java script语言

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

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

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等功能对开发者都非常有帮助。

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

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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页