亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HTML中的JavaScript 一

系統(tǒng) 2334 0

在前面幾章中,學習了 JavaScript 的核心 ECMAScript 以及該語言工作方式的基礎知識。從本章開始,重點將轉移到如何在 Web 瀏覽器中使用 JavaScript

Netscape Navigator 2.0 初次引入 JavaScript 以來, Web 瀏覽器已有了長足的發(fā)展。今天的瀏覽器不再只能處理傳統(tǒng)的 HTML 文件,它們能處理各種格式的文件。具有諷刺意味的是,這些文件中的大多數(shù)都采用 JavaScript 作為動態(tài)改變客戶端內(nèi)容的方式。這一章探討如何把 JavaScript 嵌入 HTML 及其他語言,并介紹了 BOM (瀏覽器對象模型)的一些基本概念。

5.1 HTML 中的 JavaScript

當然,第一個利用嵌入式 JavaScript 的語言還是 HTML ,因此首先討論的自然是如何在 HTML 中使用 JavaScript HTML 中嵌入 JavaScript 是從引入用于 JavaScript 的標簽和為 HTML 的一些通用 部分增加了新特性開始的。

5.1.1 <script/> 標簽

HTML 頁面中包含 JavaScript 使用 <script/> 標簽實現(xiàn)的。該標簽通常放置在頁面的 <head/> 標簽中,最初定義的 <script/> 標簽具有一個或兩個特性, language 特性聲明要使用的腳本語言, src 特性是可選的,聲明要加入頁面的外部 JavaScript 文件。 language 特性一般被設置為 JavaScript ,不過也可用它聲明 JavaScript 的確切版本,如 JavaScript 1.3 (如果省略 language 特性,瀏覽器默認使用最新的 JavaScript 版本)。

盡管 <script/> 最初是為 JavaScript 設計的,但可以用于聲明任意多種不同的客戶端腳本語言, language 特性用于聲明使用的代碼的類型。例如,可把 language 特性設置為 VBScript ,使用 IE VBScript 語言(只適用于 Windows )。

如果未聲明 src 特性,在 <script/> 中即可以任意形式編寫 JavaScript 代碼。如聲明了 src 特性,那么 <script/> 中的代碼可能就是無效的(由瀏覽器決定)。例如:

這個例子中既有內(nèi)嵌的 JavaScript 代碼,又有對外部 JavaScript 文件的鏈接。使用 src 特性,即可像引用圖像和樣式表一樣引用 JavaScript 文件。

雖然大多數(shù)瀏覽器并未要求,但根據(jù)規(guī)約,外部 JavaScript 文件的擴展名應為 .js (這樣可以使用 JSP PHP 或其他服務器端的腳本語言動態(tài)生成 JavaScript 代碼)。

5.1.2 外部文件格式

外部 JavaScript 語言的格式非常簡單。事實上,它們只包含 JavaScript 代碼的純文本文件。在外部文件中不需要 <script/> 標簽,引用文件的 <script/> 標簽出現(xiàn)在 HTML 頁中。這使得外部 JavaScript 文件看起來很像其他程序設計語言的源代碼文件。

例如,考慮下面的內(nèi)嵌代碼:

要把函數(shù) sayHi() 放在外部文件 external.js 中,需要復制函數(shù)文本自身(如圖 5-1 所示)。

5-1

然后可更新 HTML 代碼,加入這個外部文件:

對于 JavaScript 源文件中可加入哪些代碼并無規(guī)定,這意味著可以給 JavaScript 文件加入任意多個類定義、函數(shù),等等。

5.1.3 內(nèi)嵌代碼和外部文件

何時應該采用內(nèi)嵌代碼,何時采用外部文件呢?雖然關于這一點并無確定而且簡潔的規(guī)則可循,不過一般認為,大量的 JavaScript 代碼不應內(nèi)嵌在 HTML 文件中,原因如下:

q 全性 ——只要查看頁面的源代碼,任何人都可確切地知道其中的代碼做了什么。如果懷有惡意的開發(fā)者查看了源代碼,就可能發(fā)現(xiàn)安全漏洞,危及整個站點或應用程序的安全。此外,在外部文件中還可加入版權和其他知識產(chǎn)權通告,而不打斷頁面流。

q 代碼維護 ——如果 JavaScript 代碼散布于多個頁面,那么代碼維護將變成一場惡夢。把所有 JavaScript 文件放在一個目錄中要容易得多,這樣在發(fā)生 JavaScript 錯誤時,就不會對放置代碼的位置有任何疑問。

q 緩存 ——瀏覽器會根據(jù)特定的設置緩存所有外部鏈接的 JavaScript 文件,這意味著如果兩個頁面使用同一個文件,只需要下載該文件一次。這將加快下載速度。把同一段代碼放在多個頁面中,不止浪費,還增加了頁面大小,從而增加下載時間。

5.1.4 標簽放置

一般說來,所有代碼和函數(shù)的定義都在 HTML 頁的 <head/> 標簽中,這樣在顯示頁面主體后,代碼就被完全裝載進瀏覽器,可供使用了。唯一該出現(xiàn)在 <body/> 標簽中的是調(diào)用前面定義的函數(shù)的代碼。

<script/> 放在 <body/> 內(nèi)時,只要腳本所屬的那部分頁面被載入瀏覽器,腳本就會被執(zhí)行。這樣在載入整個頁面之前,也可執(zhí)行 JavaScript 代碼。例如:

在這段代碼中,方法 sayHi() 在頁面顯示所有文本前調(diào)用,這意味著警告消息將在文本 "This is the first text the user will see." 顯示前彈出。建議不采用這種在頁面的 <body/> 標簽內(nèi)調(diào)用 JavaScript 函數(shù)的方法,應該盡量避免它。相反的,建議在頁面主體中只使用 事件處理函數(shù) event handler ),例如:

這里,使用 <input/> 標簽創(chuàng)建一個按鈕,點擊它時調(diào)用 sayHi() 方法。 onclick 特性聲明一個事件處理函數(shù),即響應特定事件的代碼。第 9 章將詳細討論事件和事件處理函數(shù)。

注意,開始載入頁面時, JavaScript 就開始運行了,因此有可能調(diào)用尚未存在的函數(shù)。在前面的例子中,把原來的 <script/> 標簽放在函數(shù)調(diào)用后就會引發(fā)錯誤:

這個例子將引發(fā)錯誤,因為在定義 sayHi() 之前就調(diào)用了它。由于 JavaScript 是從上到下載入的,所以在遇到第二個 <script/> 標簽前,函數(shù) sayHi() 還不存在。注意這種問題,此外,如前所述,使用事件和事件處理函數(shù)調(diào)用 JavaScript 函數(shù)。

5.1.5 隱藏還是不隱藏

初次引入 JavaScript 時,只有一種瀏覽器支持它,因此大家開始關心,不支持 JavaScript 的瀏覽器如何處理 <script/> 標簽及其中包含的代碼。最后,設計了一種用于對舊的瀏覽器隱藏 JavaScri pt 代碼(這是一個短語,在當今因特網(wǎng)上的許多 Web 站點的源代碼中都能找到它)的格式。下面的代碼在內(nèi)嵌代碼周圍加入 HTML 注釋,這樣其他瀏覽器就不會在屏幕上顯示這段代碼。

第一行緊接起始標簽 <script> 開始一條 HTML 注釋。這樣做是有效的,因為瀏覽器仍然把該行余下的部分看成 HTML 的一部分, JavaScript 代碼從下一行開始。接下來的是常規(guī)的函數(shù)定義。第 2 行到最后一行是最有趣的部分,因為它以單行 JavaScript 注釋標記(兩個前斜線)開始,后面是 HTML 注釋的結尾標記( --> )。這一行仍被看作 JavaScript 代碼,所以單行注釋標記是避免語法錯所必需的。不過,舊的瀏覽器只承認 HMLT 注釋的結束標記,因此,將忽略所有 JavaScript 代碼。但是,支持 JavaScript 的瀏覽器只忽略該行,繼續(xù)執(zhí)行 </script> 標簽。

盡管這種隱藏代碼的方法在 Web 早期非常流行,今天卻不再是必需的。目前,大多數(shù) Web 瀏覽器都支持 JavaScript ,而不支持 JavaScript 的瀏覽器通常足夠聰明,自己就能夠忽略 JavaScript 代碼。

5.1.6 <noscript/> 標簽

不支持 JavaScript 的瀏覽器另外令人關注的是如何提供替代的內(nèi)容。隱藏代碼只是解決方法的一部分,開發(fā)者還需要一種方法,聲明在 JavaScript 不能用時應該顯示的內(nèi)容。解決方法是采用 <noscript/> 標簽,它可包含任何 HTML 代碼(除 <script/> )。支持或啟用 JavaScript 的瀏覽器會忽略這些 HTML 代碼,不支持或者禁用 JavaScript 的瀏覽器則顯示 <noscript/> 的內(nèi)容。例如:

在這個例子中, <noscript/> 標簽中有一條消息,告訴用戶瀏覽器不支持 JavaScript 。第 8 章解釋 <noscript/> 的實際用法。

5.1.7 XHTML 中的改變

近來,隨著 XHTML (可擴展 HTML )標準的出現(xiàn), <script/> 標簽也經(jīng)歷了一些改變。該標簽不再用 language 特性,而用 type 特性聲明內(nèi)嵌代碼或要加入的外部文件的 mime 類型, JavaScript mime 類型是 "text/javascript" 。例如:

即使許多瀏覽器不完全支持 XHTML ,但大多數(shù)開發(fā)者現(xiàn)在都用 type 特性,而不用 language 特性,以提供更好的 XHTML 支持。省略 language 特性不會帶來任何問題,因為如前所述,所有瀏覽器都默認 <script/> 的該屬性值為 JavaScript

XHTML 的第二個改變是使用 CDATA 段。 XML 中的 CDATA 段用于聲明不應被解析為標簽的文本( XHTML 也是如此),這樣就可以使用特殊字符,如小于( < )、大于( > )、和號( & )和雙引號( " ),而不必使用它們的字符實體。考慮下面的代碼:

這個函數(shù)相當簡單,它比較數(shù)字 a b ,然后顯示消息說明它們的關系。但是,在 XHTML 中,這段代碼是無效的,因為它使用了三個特殊符號,即小于、大于和雙引號。要修正這個問題,必須分別用這三個字符的 XML 實體 &lt; &gt; &quot; 替換它們:

這段代碼存在兩個問題。首先,開發(fā)者不習慣用 XML 實體編寫代碼。這使代碼很難讀懂。其次,在 JavaScript 中,這種代碼實際上將視為有語法錯,因為解釋程序不知道 XML 實體的意思。用 CDATA 段即可以以常規(guī)形式(即易讀的語法)編寫 JavaScript 代碼。正式加入 CDATA 段的方法如下:

雖然這是正式方式,但還要記住,大多數(shù)瀏覽器都不完全支持 XHTML ,這就帶來主要問題,即這在 JavaScript 中是個語法錯誤,因為大多數(shù)瀏覽器還不認識 CDATA 段。

當前使用的解決方案模仿了“對舊瀏覽器隱藏”代碼的方法。使用單行的 JavaScript 注釋,可在不影響代碼語法的情況下嵌入 CDATA 段:

現(xiàn)在,這段代碼在不支持 XHTML 的瀏覽器中也可運行。

type 特性一樣,隨著開發(fā)者為瀏覽器中的 XHTML 準備更好的支持, CDATA 的這種用法也越來越流行。但是,為避免 CDATA 的問題,最好還是用外部文件引入 JavaScript 代碼。

HTML中的JavaScript 一


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久91亚洲精品久久91综合 | 在线观看深夜观看网站免费 | 国产丶欧美丶日韩丶不卡影视 | 性影院 | 亚洲欧美成人中文在线网站 | 国产精品久久免费视频 | 特级毛片在线大全免费播放 | 曰本毛片| 免费99精品国产自在现线观看 | 国产一级特黄高清在线大片 | 久热精品男人的天堂在线视频 | 国产亚洲精品久久久久久小说 | 狠狠色狠狠色综合 | 日本高清一级做a爱过程免费视频 | 黄色毛片视频免费 | 亚洲精品国产成人一区二区 | 美女性色| 亚洲欧洲精品成人久久曰 | 国产成人刺激视频在线观看 | 日日干夜夜艹 | 亚洲精品久久久久久动漫剧情 | 国产色啪午夜免费视频 | 九九夜夜操妹子 | 亚洲国产成人资源在线桃色 | 久久九九青青国产精品 | 亚洲www色| 国产精品久久久久久影视 | 欧美vs日韩vs国产在线观看 | 天天干天天色天天干 | 天天弄天天模 | 奇米影视888| 99爱在线观看精品视频 | 亚洲免费观看 | 一级毛片www | 中文字幕在线观看一区 | 婷婷网五月天天综合天天爱 | 一级毛片一级毛片a毛片欧美 | 成人国产片免费 | 国产成人精品一区二区免费 | 精品国偷自产在线 | 老司机午夜永久在线观看 |