天天看點

第二章 在Html中使用JavaScript

https://www.jianshu.com/p/8247a9401725

2.1 Script元素

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

<script>定義了下列6個屬性:

  async:可選。async 屬性規定一旦腳本可用,則會異步執行,表示應該立即下載下傳腳本,但不妨礙頁面中的其他操作,比如下載下傳其他資源或等待加載其他腳本。async 屬性僅适用于外部腳本(隻有在使用 src 屬性時)。

    charset:可選。表示通過src屬性指定的代碼的字元集。由于大多數浏覽器會忽略它的值是以很少用。

    defer:可選。表示腳本可以延遲到文檔完全被解析和顯示之後再執行。隻對外部腳本檔案有效。最好隻包含一個延遲腳本。HTML5 的實作會忽略給嵌入腳本設定的 defer 屬性。

language: 已經廢棄。

    src:可選。表示包含要執行代碼的外部檔案。

    type:可選。可以看成language的替代屬性,表示編寫代碼使用的腳本語言的内容類型(也稱MIME類型)。伺服器在傳送JavaScript檔案時使用的MIME類型通常是application/x-javascript。

把JavaScript檔案放入<head>元素中,意味着必須等到全部JavaScript代碼都被下載下傳,解析和執行完成之後,才開始呈現頁面内容(浏覽器在遇到body标簽時才開始呈現内容)。

這個問題會導緻浏覽器在呈現頁面時出現明顯延遲,導緻浏覽器視窗一片空白。

現在Web程式一般都把JavaScript引用放在<body>元素頁面的内容後面。

HTML4.0.1為<script>标簽定義了defer屬性(隻适用外部腳本)。這個屬性的用途是表明腳本在執行的時候不會影響頁面的構造。也就是說,腳本會被延遲到整個頁面都解析完畢後再運作。

是以,在<script>元素中設定defer屬性,相當于告訴浏覽器立即下載下傳,但延遲執行。

在</html>之後才執行,按照出現的先後吮吸執行。

IE4、FireFox3.5、Safari5、Chrome是最早支援defer屬性的浏覽器。其他浏覽器會忽略這個屬性,像平常腳本一樣處理。

為此,把延遲腳本放在頁面底部仍然是最佳選擇

HTML5為<script>标簽定義了async屬性(隻适用外部腳本)。告訴浏覽器立即下載下傳檔案。标記為async的腳本并不保證它們的先後順序執行。

      用CData片段來包含JavaScript代碼,在XHTML中,CData是文檔中的一個特殊區域,這個區域可以包含不需要解析的任意格式的文本内容。

       [CDATA{

      //中間可以寫js代碼

      }]

     如果有浏覽器不相容XHTML的話,可以使用JavaScript注釋将CData标記注釋掉

在最早引入<script>元素的時候,該元素與傳統的HTML的解析是有沖突的。由于要對這個元素應用特殊的解析規則,是以在那些不支援JavaScript的浏覽器(Mosaic)中就會導緻問題。

具體來說,不支援JavaScript的浏覽器會把<script>元素的内容直接輸出到頁面中,是以會破壞頁面的布局和外觀。

讓JavaScript代碼包含在一個HTML注釋中,如下所示

<script><!--

//js代碼

//--></script>

雖然這種注釋JavaScript代碼的格式得到了所有浏覽器的認可,也能被正确解釋,但由于所有浏覽器都已經支援JavaScript,是以也就沒有必要再使用這種格式。

在XHTML模式下,因為腳本包含在XML注釋中,所有腳本會被忽略

2.2 嵌入代碼與外部檔案

在HTML中嵌入JavaScript代碼雖然沒有問題,但一般認為最好的做法還是盡可能使用外部檔案來包含JavaScript代碼。

不過,并不存在必須使用外部檔案的硬性規定,但支援外部檔案的人多會強調如下優點:

1.可維護性

遍及不同HTML頁面的JavaScript會造成維護問題。但把所有JavaScript檔案都放在一個檔案夾中,維護起來就輕松多了。而且開發人員是以也能夠在不觸及HTML标記的情況下,集中精力編輯JavaScript代碼。

2.可緩存

浏覽器能夠根據具體的設定,緩存連結的所有外部JavaScript檔案。也就是說,如果有兩個頁面都是用同一個檔案,那麼這個檔案隻需要下載下傳一次。是以,最終結果就是能夠加快頁面加載的速度。

3.适應未來:

通過外部檔案來包含JavaScript無須使用前面提到的XHTML或者注釋。HTML和XHTML包含外部檔案的文法是相同的。

2.3 文檔模式

ie5.5引入了文檔模式的概念,而這個概念是通過使用文檔類型doctype切換實作的。

最初的兩種文檔模式,混雜模式quirks mode和标準模式 standard mode。

ie之後又提出了,所謂的準标準模式almost standards mode,這種模式下的浏覽器特性有很多都是符合标準的,但是也不盡然。不标準的地方主要展現在處理圖檔間隙的時候(在表格中使用圖檔時問題最明顯)

 如果在文檔開始處沒有發現文檔類型聲明,則所有的浏覽器都會預設開啟混雜模式。但是采用混雜模式,并不是什麼值得推薦的做法,因為不同浏覽器在這種模式下的行為差異非常大。

1.對于标準模式,可以使用下面任何一種文檔類型來開啟

2.對于準标準模式,可以通過使用transitional或frameset文檔類型來觸發

準标準模式與标準模式非常接近,它們的差異幾乎可以忽略不計。是以,當有人提到“标準模式”時,有可能是指這兩種模式中的任何一種。而且檢測文檔模式時也不會發現什麼不同。本書後面提到的标準模式時,指的是除混雜模式之外的其他模式。

2.4 <noscript>元素

早期的浏覽器都面臨一個特殊的問題,即當浏覽器不支援JavaScript時,如何讓頁面平穩地退化。

解決方案是創造一個<noscript>元素,用以在不支援JavaScript的浏覽器中顯示替代内容。

這個元素可以包含在能夠出現在文檔<body>中的任何HTML元素--<script>元素除外。

包含在<noscript>元素中的内容隻有在下列情況下才會顯示出來:

1.浏覽器不支援腳本

2.浏覽器支援腳本,但是腳本被禁用

繼續閱讀