2012-05-25 58 views
2

工作,我遇到的問題是什麼這個問題的標題說,我的網頁上有條件的意見,如果擴展名是HTML才能正常工作。條件註釋只有當文件擴展名是HTML

如果保存爲XHTML文件,有條件的評論不工作,頁面顯示「不是Internet Explorer」,無論瀏覽器。但是,當文件重命名爲html時,一切正常。這不會是一個問題,除非頁面需要是一個xhtml文件。

下面是再現問題最少的代碼量:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
<title>Title</title> 
</head> 
<body> 
     <!--[if IE]>Internet explorer<![endif]--> 
     <!--[if !IE]>-->Not internet explorer<!--<![endif]--> 
</body> 
</html> 

,我可以通過測試並搜索谷歌幾個小時,這個網站找到的唯一的事情是很不幸沒第二行」不要做任何事情。

+0

我以前從未見過的'.xhtml'擴展。你確定你不會把'xHTML'混淆爲現代HTML與文件擴展的規範嗎?通常,當您在代碼中使用嚴格/過渡的'xHTML'時,您仍然使用'.html'擴展名。 – mellamokb

+0

「將文件名從home.html更改爲window.xhtml。」 https://support.fastspring.com/entries/20070328-look-and-feel-creating-custom-store-styles如果文件不是'.xhtml',則文件被拒絕 –

回答

1

你在IE9測試的權利?

這事,當你在本地測試文件只發生。如果您通過Web服務器測試了該頁面,則無論文件擴展名如何,您都會發現條件註釋正常工作。

原因是在IE9(或其他瀏覽器,但不包括IE8或更早版本)中以.xhtml擴展名本地訪問文件,相當於以application/xhtml+xml內容類型提供頁面。

也就是說,IE9正在處理的文件爲「真正的」 XHTML。通常情況下,XHTML文件的內容類型爲text/html,因此將其處理爲HTML而非XHTML。

真正的XHTML要求標記使用和XML解析器解析。 XML解析規則非常嚴格,並且不允許討厭的黑客入侵,所以application/xhtml+xml模式下的IE9不支持它們,事實上也不支持它們。

+0

我無法發現條件註釋正常工作: http://wademcgillis.com/example.xhtml –

+0

有趣。您已將Apache設置爲將.xhtml文件作爲內容類型「application/xhtml + xml」提供服務,以便應用與XML處理相同的問題。請注意,這意味着IE8及更早版本根本無法處理.xhtml文件。 – Alohci

+0

+1以獲得正確的解釋。 -½表示「通常情況下,XHTML文件是以text/html內容類型提供的」。儘管這是通常的做法,但爲XHTML文件提供application/xhtml + xml仍然是正確的做法,並且不應該灰心。當瀏覽器可以依賴XML解析器而不是慢標籤解析器時,它們會變得更快。 –

0
You can use this code after including jquery library and in this way your xhtml will work in the same way than html page. 

    <script type="text/javascript">//<![CDATA[ 

     var div = document.createElement("div"); 
     div.innerHTML = "<!--[if IE 8]><i></i><![endif]-->"; 
     var isIE8 = (div.getElementsByTagName("i").length == 1); 

     div.innerHTML = "<!--[if IE 9]><i></i><![endif]-->"; 
     var isIE9 = (div.getElementsByTagName("i").length == 1); 

     if (isIE8) { 
      $('html').addClass('ie').addClass('ie8'); 
     } else 
     if (isIE9) { 
      $('html').addClass('ie').addClass('ie9'); 
     } 
    //]]> 
    </script>