0

看來,當網頁有看來「IE = EmulateIE7」也會使「<! - [if lt IE 8]>」爲真?

<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible' /> 

使IE 8將在網頁模仿IE 7,再後來,當有

<!--[if lt IE 8]> 
    <link href="http://www.example.com/stylesheets/compiled/ie.css" type="text/css" /> 
<![endif]--> 

那麼它也將被加載ie.css

也就是說,它是IE 8,模擬IE 7,所以lt IE 8將是true

更新:但是,然後,服務器端變量HTTP_USER_AGENT仍然會說IE 8?由於瀏覽器以IE 8的身份訪問服務器,因此將IE 8設置爲HTTP_USER_AGENT的字符串,然後服務器回覆並希望模擬IE 7。因此,如果服務器語言(如PHP)檢測到HTTP_USER_AGENT,它仍然是IE 8兼容模式(IE 7仿真模式)?

+2

我沒有任何事實,但這聽起來像IE的行爲的合理方式。 – 2010-06-24 22:27:24

+0

這不是你所期望的嗎?如果瀏覽器事實上像IE7一樣,那麼你不希望它做一些只有IE <8才能做的事情嗎? – pkaeding 2010-06-24 22:32:34

回答

1

這就是meta標籤的重點,不是嗎?那一刻你有這樣的:

<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible' /> 

IE8開始表現在客戶端和IE7一樣:

  • 你的頁面將所有渲染,因爲他們將在IE7
  • 你的條件註釋針對什麼比舊的IE8(<!--[if lt IE 8]>)也將被讀取,並且內執行的代碼,所以ie.css加載

但是,IE7切換僅在IE8讀取該元標記後發生。由於您的HTML作爲響應的一部分返回,因此IE8必須先請求它。由於IE8事先不知道這個元標籤會出現,所以它發送的用戶代理字符串是MSIE 8.0。然後PHP將其識別爲IE8。

0

如果你想要一個不同的解決方案(並願意使用它),你可以使用jQuery來檢測瀏覽器(jQuery.browser)。在ie8兼容模式下,它的結果是ie7。

0

如果你告訴ie8模擬ie7,你可以相信你的css for ie7應該是正確的。只需使用lte而不是lt。

<!--[if IE 8]> 
    <meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible' /> 
<![endif]--> 
<!--[if lte IE 8]> 
    <link href="http://www.example.com/stylesheets/compiled/ie.css" type="text/css" /> 
<![endif]--> 
相關問題