第一章:目标
javascript的目标是给Web页面增加一个额外的可用性层。
js分为6个部分:javascript核心、BOM(浏览器对象模型)、事件、DOM(文档对象模型)、CSS修改、数据检索(XMLHttpRequest)。
他们的任务:核心使得js成为一门编程语言的基础,控制结构变量函数和对象;BOM给浏览器窗口下达指令,读取cookie,与其他窗口进行通信;事件找出用户执行的动作,并定义这些动作将触发的函数;DOM学习和改变HTML文档的结构;CSS学习和改变HTML文档的CSS表现;数据检索从服务器下载新的数据而不刷新页面。
所有的脚本都是用核心语言、事件和DOM:等待行动,并更新页面。
ECMA(欧洲计算机制造联合协会)对javascript核心进行标准化(ECMA1.5),这个标准应用到flash、浏览器、服务器以及其他尚未产生的应用上。
W3C(万维网协会)创建了DOM规范,它也包括事件处理和CSS修改的内容。微软仍然没有实现W3C的事件规范,却使用它自己专有的事件模型。
WHAT-WG(Web超文本应用技术工作组)正为BOM标准而工作。
数据检索使用的则是微软的事实标准,W3C为数据检索推出了XMLHttpRequest规范的第一部草案。
<script标签中允许在language="javascript1.2"中指定版本号,但自1.2版本开始Netscape和Explorer 4都宣称支持,因此设置版本号没有意义,事实上根本不需要这个属性。
js遵循严格的安全规范
不允许访问宿主计算机:不能读写除cookie外的文件系统
同源策略:两个窗口的页面的Web域名必须相同,才允许跨窗口通信。同子域下可以通过设置相同的document.domain(必须设置为真实域名的一部分)进行通信。
其他限制:不能读取历史对象的属性(当可以在历史中后退);不能设置文件上传表单域的值;试图关闭窗口时会询问用户;不允许打开一个小于100x100或处于屏幕之外或没有标题栏的新窗口。
javascript的历史
创始人Brendan Eich当时在Netscape工作,js公开的历史从1996.3的Netscape2发布开始。
Eich最初的目标是为Web开发者提供一种简单的方式为页面增加一些交互,这些脚本从其他页面复制过来并稍作调整就可以使用。最初命名为LiveScript。但Netscape出于市场的考虑选取了一个与当时流行的Java相似的一个名字,并仓促地要求Eich“使这个语言看起来想Java”,从而误导人们将js视为轻量级的Java版本,看成一个可以拿来搬弄技巧而不值得引起严谨的程序员注意的轻巧的脚本语言。
第一瘦时期
早期的日子里,浏览器是一个瘦客户端,表单验证和鼠标滑过的效果是令人惊艳的,但它们不允许在客户端大量进行交互,用户被迫与服务端交互。
1996~1999间Netscape与微软的浏览器大战开始,双方都推出自己的第4版,为争夺CSS规范各不相让。两个浏览器厂商都让javascript可以控制这些CSS声明,于是就可以使用position:absolute创建一个“层”,然后通过持续地改变top和left似的它在屏幕上移动,这才叫酷!这些小伎俩被冠以DHTML为人所知,即通过javascript来改变css属性。
为此双方都推出了自己专有的DOM(又称过渡DOM,介于Netscap3DOM和W3CDOM之间),Netscape4支持document.layers,而Explorer支持document.all。
第一个胖阶段
有了这些新特性,客户端增加大量的互动:动画、隐藏和其他视觉效果,javascript的目标转向技术,而不是可用性,js进入胖阶段。
微软在1999年发布Explorer5,相当好地支持了CSS和新的W3CDOM标准。尽管公司和Web开发者尽力挽救,Netscape4还是灭亡了,差不多同一时间,js的第一个胖阶段结束,人们发现的不过是少量的javascript和大量的空话。
CSS变革开始。
第二个瘦阶段
浏览器大战接近尾声的时候,Web开发者们厌倦了大量的编程和变通做法,极度地想从头开始。CSS,而不是javascript,给了他们最好的机会来完全突破过去的束缚。
大概从2003年开始,一部分先锋开始用一种深受CSS革命理念影响的新方式写javascript,javascript第一次深深地潜入到全面的Web开发理论中去,而可访问性问题终于被认识到并着手解决。
无侵入脚本编程提出,但并没有立即征服世界。
第二个胖阶段
从服务器端悄悄地载入小块的数据,唤醒了沉睡多年的技术构思和可用性观念,Jesse James Garrett的文章《Ajax:Web应用程序的新方法》开创了Ajax时代,javascript的用途又一次被重新定义,传统web开发者创建的是瘦的可访问的乱糟糟的js代码,而来自服务端开发的“资深程序员们”创建的是面向对象的,胖的,可访问性差的ajax客户端。焦点又被集中在技术方面,可用性及为什么要用ajax仍很少被关注,臃肿的库(即框架)与日俱增。
所幸人们都开始同意并遵循已经存在的标准。
2006.5数据显示,目前共有至少134中Ajax框架,我个人认为这股热潮已经到达了顶峰,有谁需要134种程序去做本质上是一样的事呢?
javascript将调整回瘦阶段,那时它的用途也将再次被重新定义,当然某个时期第三个瘦阶段结束后会迎来第三个胖阶段.. 从根本上,这种情况只有当每个人都只认同唯一的javascript用途时才会被打破。