网页中的代码


网页中的代码

新鲜的玩意儿

1996 年末,公司老板P&J 找我去给他的一个朋友帮忙,做一些网页。那时事实上还没有说要做成网站。在那个时代,中国的IT 人中可能还有2/3 的触网者在玩一种叫“电子公告板(Bulletin Board SystemBBS)”的东西——这与现在的BBS 很不一样,它是一种利用现有电话网组成的PC-BBS 系统,使用基于Telnet 的终端登入操作。而另外1/3的触网者可能已经开始了互联网之旅,知道了像主页(Home Page)、超链接(Hyper Link)这样的一些东西。

我最开始做的网页只用于展示信息,是一个个单纯的、静态的网页,并通过一些超链接连接起来。当时网页开发的环境并不好(像现在的Dreamweaver 这类程序,那时只能是梦想),因此我只能用记事本(notepad.exe)来写HTML。当时显示这些.htm 文件的浏览器就是Netscape Navigator 3

我很快就遇到了麻烦,因为P&J 的朋友说希望让浏览网页的用户们能做更多的事,例如搜索等操作。我笑着说:“如果在电子公告板上,写段脚本就可以了;但在互联网上面,却要做很多的工作。”

事实上我并不知道要做多少的工作。我随后查阅的资料表明:不但要在网页中放一些表单让浏览者提交信息,还要在网站的服务器上写些代码来响应这些提交信息。我向那位先生摊开双手,说:“如果你真的想要这样做,那么我们可能需要三个月,或者更久。因为我还必须学习一些新鲜的玩意儿才行。”

那时的触网者,对这些“新鲜的玩意儿”的了解还几乎是零。因此,这个想法很自然地被搁置了。而我后来(1997 年)被调到成都,终于有更多的机会接触Internet,而且浏览器环境已经换成了Internet Explorer 4.0

那是一个美好的时代。通过互联网络,大量的新东西很快被传递进来。我终于有机会了解一些新的技术名词,例如CSS JavaScript。当时(1997 12 月)HTML 4.0 的标准已经确定,浏览器的兼容性开始变得更好,Internet Explorer(以下简称IE)也越来越有取代Netscape Navigator(以下简称NN)而一统天下的趋势。除了这些,我还对在Delphi 中进行ISAPI CGI ISAPI Filter 开发的技术也展开了深入的学习。

第一段在网页中的代码

1998 年,我被调回到河南郑州,成为一名专职程序员,任职于当时一家开发反病毒软件的公司,主要工作是用Delphi Windows 环境下的开发。而当时我的个人兴趣之一,就是“做一个个人网站”。那时大家都对“做主页”很感兴趣,我的老朋友傅贵1就专门写了一套代码,以方便普通互联网用户将自己的主页放到“个人空间”里。同时,他还为这些个人用户提供了公共的BBS 程序和一些其他的服务器端代码。但我并不满足于这些,我满脑子想的是做一个“自己的网站”。我争取到了一台使用IIS 4.0 的服务器,由于有ISAPI CGI 这样的服务器端技术,因此一年多前的那个“如何让浏览者提交信息” 的问题已经迎刃而解。而当时更先进的浏览器端开发技术也已经出现,例如Java Applet。我当时便选择了一个Java Applet 来做“网页菜单”。

在当时,在IE 中显示Java Applet 之前需要装载整个JVMJava Virtual MachineJava虚拟机)。这对于现在的CPU 来说,已经不是什么大不了的负担了,但当时这个过程却非常漫长。在这个“漫长的过程”中,网页显示一片空白,因此浏览者可能在看到一个“漂亮的菜单”之前就跑掉了。

为此我不得不像做Windows 桌面应用程序一样,弄一个“闪屏窗口”放在前面。这个窗口只用于显示“Loading...”这样的文字(或图片)。而同时,我在网页中加入一个<APPLET>标签,使得JVM 能偷偷地载入到浏览器中。然而,接下来的问题是:这个过程怎么结束呢?

我当时能找到的所有Java Applet 都没有“在JVM 载入后自动链接到其他网页”的能力。但其中有一个能力可以支持一种状态查询,它能在一个名为isInited 的属性中返回状态True False

这时,我需要在浏览器中查询到这种状态,如果是True,就可以结束“Loading”过程,进入到真正的主页中去。由于JVM 已经偷偷地载入过了,因此“漂亮的菜单”就能很快地显示出来。由于我得不到Java Applet Java 源代码并重写这个Applet 去切换网址,因此这个“访问Java Applet 的属性”的功能就需要用一种在浏览器中的技术来实现了。

这时跳到我面前的东西,就是JavaScript。我为此而写出的代码如下:

最初的价值

JavaScript 最初被开发人员接受,其实是一种无可奈何的选择。

首先,网景公司(Netscape Communications Corporation)很早就意识到:网络需要一种集成的、统一的、客户端到服务端的解决方案。为此Netscape 提出了LiveWire 的概念,并设计了当时名为LiveScript 的语言用来在服务器上创建类似于CGI 的应用程序;与此同时,网景公司也意识到他们的浏览器NN 中需要一个脚本语言的支持,解决类似于“在向服务器提交数据之前进行验证”的问题。1995 4 月,网景公司招募了BrendanEich,希望Brendan Eich 来实现这样的一种语言,实现“使网页活动起来(Making WebPages Come Alive)”。到了1995 9 月,在发布NN 2.0 Beta 时,LiveScript 最早作为一种“浏览器上的脚本语言”被推到网页制作人员的面前;随后,在9 18 日,网景公司宣布在其服务器端产品“LiveWire Server Extension Engine”中将包含一个该语言的服务器端(Server-side)版本。

在这时,Sun 公司的Java 语言大行其道。Netscape 决定在服务器端与Sun 进行合作,这种合作后来扩展到浏览器,推出了名为Java Applet 的“小应用”。而Netscape 也借势将LiveScript 改名,于1995 12 4 日,在与Sun 公司共同发布声明中首次使用了“JavaScript”这个名字,称之为一种“面向企业网络和互联网的、开放的、跨平台的对象脚本语言”。从这种定位来看,最初的JavaScript 在一定程度上是为了解决浏览器与服务器之间统一开发而实现的一种语言。

微软在浏览器方面是一个后来者。因此,它不得不在自己的浏览器中加入JavaScript的支持。但为了避免冲突,微软使用了“JScript”这个名字。微软在1996 8 月发布IE3 时,提供了相当于NN 3 JavaScript 脚本语言支持,但同时也提供了自己的VBScript

IE NN 进行那场著名的“浏览器大战”的时候,没有人能够看到结局。因此要想做一个“可以看的网页”,只能选择一个在两种浏览器上都能运行的脚本语言。这就使得JavaScript 成为唯一可能正确的答案。当时,几乎所有的书籍都向读者宣导“兼容浏览器是一件天大的事”。为了这种兼容,一些书籍甚至要求网页制作人员最好不要用JavaScript,“让所有的事,在服务器上使用Perl CGI 去做好了”。

然而,随着 IE 4.0 的推出以及缘于DHTMLDynamic HML,动态网页)带来的诱惑,一切都发生了改变。

 

 

本文节选自《JavaScript语言精髓与编程实践(2)》一书。

图书详细信息:

http://www.cnblogs.com/broadview/archive/2012/05/04/2482240.html

 

posted @ 2012-05-04 10:23  博文视点(北京)官方博客  阅读(193)  评论(0编辑  收藏  举报