官术网_书友最值得收藏!

1.1 網頁中的代碼

1.1.1 新鮮的玩意兒

1996年末,公司老板P&J找我去給他的一個朋友幫忙,做一些網頁。那時事實上還沒有說要做成網站。在那個時代,中國的IT人中可能還有2/3的觸網者在玩一種叫“電子公告板(Bulletin Board System, BBS)”的東西——這與現在的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開發的技術也展開了深入的學習。

1.1.2 第一段在網頁中的代碼

1998年,我被調回到河南鄭州,成為一名專職程序員,任職于當時一家開發反病毒軟件的公司,主要工作是用Delphi做Windows環境下的開發。而當時我的個人興趣之一,就是“做一個個人網站”。那時大家都對“做主頁”很感興趣,我的老朋友傅貴在中國互聯網技術論壇的早期,傅貴先生創建了著名的“Delphi/C++ Builder論壇”,他也是“中國開發網ORG(cndev.org)”的創建者。就專門寫了一套代碼,以方便普通互聯網用戶將自己的主頁放到“個人空間”里。同時,他還為這些個人用戶提供了公共的BBS程序和一些其他的服務器端代碼。但我并不滿足于這些,我滿腦子想的是做一個“自己的網站”。我爭取到了一臺使用IIS 4.0的服務器,由于有ISAPI-CGI這樣的服務器端技術,因此一年多前的那個“如何讓瀏覽者提交信息”的問題已經迎刃而解。而當時更先進的瀏覽器端開發技術也已經出現,例如Java Applet。我當時便選擇了一個Java Applet來做“網頁菜單”。

在當時,在IE中顯示Java Applet之前需要裝載整個JVM(Java Virtual Machine, Java虛擬機)。這對于現在的CPU來說,已經不是什么大不了的負擔了,但當時這個過程卻非常漫長。在這個“漫長的過程”中,網頁顯示一片空白,因此瀏覽者可能在看到一個“漂亮的菜單”之前就跑掉了。

為此我不得不像做Windows桌面應用程序一樣,弄一個“閃屏窗口”放在前面。這個窗口只用于顯示“Loading...”這樣的文字(或圖片)。而同時,我在網頁中加入一個<APPLET>標簽,使得JVM能偷偷地載入到瀏覽器中。然而,接下來的問題是:這個過程怎么結束呢?

我當時能找到的所有Java Applet都沒有“在JVM載入后自動鏈接到其他網頁”的能力。但其中有一個能力可以支持一種狀態查詢,它能在一個名為isInited的屬性中返回狀態True或False。

這時,我需要在瀏覽器中查詢到這種狀態,如果是True,就可以結束“Loading”過程,進入到真正的主頁中去。由于JVM已經偷偷地載入過了,因此“漂亮的菜單”就能很快地顯示出來。由于我得不到Java Applet的Java源代碼并重寫這個Applet去切換網址,因此這個“訪問Java Applet的屬性”的功能就需要用一種在瀏覽器中的技術來實現了。

這時跳到我面前的東西,就是JavaScript。我為此而寫出的代碼如下:

          <script language="JavaScript">
          function checkInited() {
            if (document.MsgApplet.isInited) {
              self.location.href = "mainpage.htm";
            }
          }
          setInterval("checkInited()", 50)
          </script>

1.1.3 最初的價值

JavaScript最初被開發人員接受,其實是一種無可奈何的選擇。

首先,網景公司(Netscape Communications Corporation)很早就意識到:網絡需要一種集成的、統一的、客戶端到服務端的解決方案。為此Netscape提出了LiveWire的概念LiveWire是Netscape公司的一個通用的Web開發環境,僅僅支持Netscape Enterprise Server和Netscape FastTrack Server,而不支持其他的Web服務器。這種技術在服務器端通過內嵌于網頁的LiveScript代碼,使用名為database、DbPool、Cursor等的一組對象來存取LiveWire Database。作為整套的解決方案,Netscape在客戶端網頁上也提供LiveScript腳本語言的支持,除了訪問Array、String等這些內置對象之外,也可以訪問window等瀏覽器對象。LiveScript后來發展為JavaScript,而LiveWire架構也成為所有Web服務器提供SP(Server Page)技術的藍本。例如,在IIS中的ASP,以及更早期的IDC (Internet Database Connect)。,并設計了當時名為LiveScript的語言用來在服務器上創建類似于CGI的應用程序;與此同時,網景公司也意識到他們的瀏覽器NN中需要一個腳本語言的支持,解決類似于“在向服務器提交數據之前進行驗證”的問題。1995年4月,網景公司招募了Brendan Eich,希望Brendan Eich來實現這樣的一種語言,實現“使網頁活動起來(Making Web Pages Come Alive)”。到了1995年9月,在發布NN 2.0 Beta時,LiveScript最早作為一種“瀏覽器上的腳本語言”被推到網頁制作人員的面前;隨后,在9月18日,網景公司宣布在其服務器端產品“LiveWire Server Extension Engine”中將包含一個該語言的服務器端(Server-side)版本該產品即是后來在1996年3月發布的Netscape Enterprise Server 2.0。參見:http://wp.netscape.com/newsref/pr/newsrelease41.html http://wp.netscape.com/newsref/pr/newsrelease98.html

在這時,Sun公司的Java語言大行其道。Netscape決定在服務器端與Sun進行合作,這種合作后來擴展到瀏覽器,推出了名為Java Applet的“小應用”。而Netscape也借勢將LiveScript改名,于1995年12月4日,在與Sun公司共同發布聲明中首次使用了“JavaScript”這個名字,稱之為一種“面向企業網絡和互聯網的、開放的、跨平臺的對象腳本語言”參見:http://wp.netscape.com/comprod/columns/techvision/innovators_be.html http://wp.netscape.com/newsref/pr/newsrelease67.html。從這種定位來看,最初的JavaScript在一定程度上是為了解決瀏覽器與服務器之間統一開發而實現的一種語言。

微軟在瀏覽器方面是一個后來者。因此,它不得不在自己的瀏覽器中加入JavaScript的支持。但為了避免沖突,微軟使用了“JScript”這個名字。微軟在1996年8月發布IE 3時,提供了相當于NN 3的JavaScript腳本語言支持,但同時也提供了自己的VBScript。

當IE與NN進行那場著名的“瀏覽器大戰”的時候,沒有人能夠看到結局。因此要想做一個“可以看的網頁”,只能選擇一個在兩種瀏覽器上都能運行的腳本語言。這就使得JavaScript成為唯一可能正確的答案。當時,幾乎所有的書籍都向讀者宣導“兼容瀏覽器是一件天大的事”。為了這種兼容,一些書籍甚至要求網頁制作人員最好不要用JavaScript, “讓所有的事,在服務器上使用Perl或CGI去做好了”。

然而,隨著IE 4.0的推出以及緣于DHTML(Dynamic HML,動態網頁)帶來的誘惑,一切都發生了改變。

主站蜘蛛池模板: 东平县| 荆门市| 平邑县| 东丰县| 界首市| 商南县| 盐边县| 康保县| 昌吉市| 平果县| 湄潭县| 德化县| 台东县| 浦北县| 陇西县| 右玉县| 沈阳市| 辽阳县| 建水县| 临安市| 柳江县| 新龙县| 大理市| 化隆| 商洛市| 蓝山县| 肥东县| 壶关县| 兴安县| 保亭| 兖州市| 会泽县| 金寨县| 凤山县| 肥东县| 长岭县| 南丰县| 崇仁县| 侯马市| 扎鲁特旗| 钟山县|