標籤:
第二章 在HTML中使用Javascript
2.1<script>元素
延遲指令碼(defer = "defer")表明指令碼在執行時不會影響頁面的構造,指令碼會被延遲到整個頁面都解析完畢後再運行。相當於告訴瀏覽器立即下載,但順延強制。HTML5規定要求指令碼按照它們出現的先後順序執行。
非同步指令碼(async)如果有多個指令檔,執行順序不確定,指定async屬性的目的是不讓頁面等待兩個指令碼下載和執行,從而非同步載入頁面其他內容。
XHTML代碼的規則比編寫HTML嚴格得多,下面的代碼塊在HTML中是有效地,但是在XHMTL中是無效的
<script type="text/javascript"> function compare(a, b) { if(a < b) { alert("A is less than B"); } else if (a > b) { alert("A is greater than B"): } else { alert("A is equal to B"); } }</script>
在XHTML中<(小於符號)在XHMTL中將被當作開始一個新標籤來解析,但是作為標籤來講,小於符號後面不能跟空格,因此導致語法錯誤。可以使用<代替小於符號。
保證能再XHTML中能正常執行的另外一個方式是用一個CData片段來包含Javascript代碼,如下所示
<script type="text/javascript"><![CDATA{ function compare(a, b) { if(a < b) { alert("A is less than B"); } else if (a > b) { alert("A is greater than B"): } else { alert("A is equal to B"); } }}]></script>
在相容CDATA的瀏覽器中,該方法可以解決問題,還有不少瀏覽器不相容XHTML,不支援CDATA片段,使用Javascript注釋掉標記即可,如下所示
<script type="text/javascript">//<![CDATA{ function compare(a, b) { if(a < b) { alert("A is less than B"); } else if (a > b) { alert("A is greater than B"): } else { alert("A is equal to B"); } }//}]></script>
2.3文檔模式
混雜模式(quirks mode)會讓IE的行為與IE5相同,
標準模式(standards mode)讓IE的行為更接近標準行為。
這兩種模式主要影響CSS內容的呈現,但在某些情況下也會影響到Javascript的解釋執行。
如果在文檔開始處沒有發現文件類型聲明,則所有瀏覽器都會預設開啟混雜模式,不推薦這種做法,不同瀏覽器在這種模式下的行為差異非常大。
IE又提出了一種准標準模式(almost standards mode),這種模式下的瀏覽器很多都是符合標準的。准標準模式可以通過過渡型或框架組型文件類型來觸發。
2.4 <noscript>元素
包含在<noscript>元素中的內容只有在下列情況下才會顯示出來:
- 瀏覽器不支援指令碼
- 瀏覽器支援指令碼,但指令碼被禁用
符合上述任何一個標準,瀏覽器都會顯示<noscript>中的內容
Javascript進階程式設計讀書筆記(第二章)