本頁是 Wikipedia 條件注釋 詞條的文字副本。查看原網頁

條件注釋說明

示例

這里是一個演示條件注釋如何工作的簡單示例。

<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
<!--[if !IE]><!-->
<p>You are not using Internet Explorer.</p>
<!--<![endif]-->

句法

有兩種“條件注釋”:下層顯示 (downlevel revealed)下層隱藏(downlevel hidden)。

每種注釋的基本句法如下表所示。第一條展示的是基本的 HTML 注釋,被包括在內作為比較以及用以說明被每種條件注釋使用的不同句法。

注釋類型 句法或可能取值
標準 HTML 注釋 <!-- Comment content  -->
downlevel-hidden <!--[if expression]> HTML <![endif]-->
downlevel-revealed <![if expression]> HTML <![endif]>

于每個條件注釋之中的句法塊內的 HTML 表示任意的 HTML 內容塊,包括腳本。兩種條件注釋均使用條件表達式以指示注釋塊內的內容應該被解析還是被忽略。條件表達式由特性,操作符,和/或決定于其特性的值組成。下表展示了支持的特性并描述了每種特性支持的值。

項目 示例 說明
IE [if IE] 字符串 "IE" 是一種對應于用以瀏覽網頁的 Internet Explorer 的版本的一種特性。
value [if IE 7] 一個對應于瀏覽器版本的整數或浮點數。返回一個布爾值,版本號和瀏覽器版本相匹配時為 true。更多信息參見版本向量(en:Version vector)。
WindowsEdition [if WindowsEdition] 適用于 Windows 7 上的 Internet Explorer 8。字符串 "WindowsEdition" 是一種對應于用以瀏覽該網頁的 Microsoft Windows 版本的特性。
value [if WindowsEdition 1] 一個對應于用以瀏覽該網頁的 Windows 的版本的整數。返回一個布爾值,數值和使用的版本相匹配時為真 true。關于所支持的值和它們所描述的版本的更多信息,參見GetProductInfo 函數的 pdwReturnedProductType 參數。
true [if true] 永遠等價于 true.
false [if false] 永遠等價于 false.

可用于創造條件注釋的算符如下表。

項目 示例 說明
! [if !IE] NOT 運算符。這被放在 特性, 算符, 或者 子表達式 的前面以反轉該表達式的布爾值含義。
lt [if lt IE 5.5] 小于運算符。第一項小于第二項時返回 true。
lte [if lte IE 6] 小于或等于運算符。第一項小于或等于第二項時返回 true。
gt [if gt IE 5] 大于運算符。第一項大于第二項時返回 true。
gte [if gte IE 7] 大于或等于運算符。第一項大于或等于第二項時返回 true。
( ) [if !(IE 7)] 子表達式運算符。用以連接布爾算符以創造更加復雜的表達式。
& [if (gt IE 5)&(lt IE 7)] AND 運算符。所有子表達式為真時返回 true。
| [if (IE 6)|(IE 7)] OR 運算符。子表達式任意一個為真時返回 true。

下層隱藏的條件注釋

如下是兩個“下層隱藏”條件注釋的示例。

<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->

或者

<!--[if lte IE 7]>
<style>
/* CSS here */
</style>
<![endif]-->

第一個示例中的指令將會讓 IE 8 讀取指定的 CSS 文件,而 IE 7 或者其它版本的 IE 將會忽略它。非 IE 的瀏覽器同樣會把它忽略因為它看起來像一條標準的 HTML 注釋。第二條示例里的標記將會讓 IE 5 至 7 讀取其內的 CSS 樣式。通過對這種標記的不同的使用你也可以挑出 IE 6, IE 5 或者比指定版本更新(大)或更舊(?。┌姹镜?IE。

下層顯示的條件注釋

如下是一個“下層顯示”條件“注釋”的示例,它除了誤導向的名字之外,根本不是一個 (X)HTML 注釋,使用默認的微軟語法:

<![if !IE]>
<link href="non-ie.css" rel="stylesheet">
<![endif]>

這個示例展示了應該僅對非 IE 瀏覽器暴露的內容,由于該條件對 IE 為假(并且因此該內容被忽略),而這些標簽自身在非 IE 瀏覽器中是無法識別的(并因此被忽略)。這不是有效的 HTML 或 XHTML。

微軟承認這種句法不是標準化的標記,意圖是這些標記被其它瀏覽器忽視并暴露其中的內容。為了確保與 W3C 標準的兼容,一些網頁開發者使用了下層顯示的條件注釋的一種替代性的技巧。

<!--[if !IE]>-->
<link href="non-ie.css" rel="stylesheet">
<!--<![endif]-->

雖然結構上有些令人困惑,這種具體的句法是有效的 (X)HTML 且對為非 IE 瀏覽器準備的有條件的片段是有用的;但如果其中的條件等價于 true(例如,如果寫意圖在非 IE 瀏覽器和一些版本的 IE 上顯示的代碼),IE 將會顯示于 HTML 內容前出現的“-->”。這個問題通過對原來的“-->”之前加一個“<!”很容易解決,如下所示:

<!--[if gt IE 6]><!-->
This code displays on non-IE browsers and on IE 7 or higher.
<!--<![endif]-->

這個額外的“<!”被非 IE 的瀏覽器忽略;它同樣會被 IE 忽略而無論條件,因為如果為假,條件注釋里面的一切都會被忽略,而如果為真,導致的標簽 <!--> 是一條空注釋并因此被忽略。

這個方法盡管在目前(截至 IE 9)版本的 Internet Explorer 中仍然有用,無法保證未來的版本將會繼續如此工作( Internet Explorer 10 已取消條件注釋的支持)。

JScript 中的條件注釋

自 Internet Explorer 4 開始,存在一種于 JScript 之中加入條件注釋的類似的專有的機理,名稱是條件編譯。 代碼示例:

<script>
/*@cc_on
  document.write("You are using IE4 or higher");
@*/
</script>

同樣有一些預定義的變量,盡管隨著微軟改變 XP SP3 上的 IE 6 的 JScript 引擎,這些不再可以依賴,現在它如下所示:

@_jscript_version == 5.7

其結果是,利用條件編譯偵測 IE 6 的方法如下:

<script>
/*@cc_on

  @if (@_jscript_version == 10)
    document.write("You are using IE10");

  @elif (@_jscript_version == 9)
    document.write("You are using IE9");
    
  @elif (@_jscript_version == 5.8)
    document.write("You are using IE8");
    
  @elif (@_jscript_version == 5.7 && window.XMLHttpRequest)
    document.write("You are using IE7");

  @elif (@_jscript_version == 5.6 || (@_jscript_version == 5.7 && !window.XMLHttpRequest))
    document.write("You are using IE6");

  @elif (@_jscript_version == 5.5)
    document.write("You are using IE5.5");

  @else
    document.write("You are using IE5 or older");

  @end

@*/
</script>

技術參考資料

Copyright © 2014 End of IE SUPPORT. All Rights Reserved

捕鱼达人千炮版弹头如何兑换金币 江苏福彩6十1 广西双彩24选7的走势图 天津时时彩是几点开奖 股票配资网先选金多多联系 贵州11选五遗漏统计 河南22选5第299期开奖结果 上海时时乐开奖最近100期走势 体彩p3试机号今天 贵州茅台股票价格 幸运28加拿大