2012-05-25 2 views
2

Проблема, с которой я сталкиваюсь, - это именно то, что говорит название этого вопроса, условные комментарии к моей странице работают только в том случае, если расширение является html.Условные комментарии работают только при расширении файла html

Если это сохраняется как файл xhtml, условные комментарии не работают, и на странице отображается «Not 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> 

Единственное, что я мог бы найти путем тестирования и поиска в течение нескольких часов на Google и этом сайте является второй линией, которая, к сожалению, Ждет» ничего не делай.

+0

Я раньше не видел расширение '.xhml '. Вы уверены, что не смешиваете «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 правильно?

Это то, что происходит только при локальном тестировании файла. Если вы протестировали страницу через веб-сервер, вы обнаружите, что условные комментарии работают нормально, независимо от расширения файла.

Причина в том, что доступ к файлу локально с расширением .xhtml в IE9 (или другими браузерами, но не IE8 или ранее) эквивалентен обслуживанию страницы с типом содержимого application/xhtml+xml.

Т.е. IE9 обрабатывает файл как «истинный» XHTML. Обычно файлы XHTML обслуживаются с типом содержимого text/html и поэтому обрабатываются как HTML, а не XHTML.

True XHTML требует, чтобы разметка анализировалась с использованием парсера XML. Правила синтаксического анализа XML очень строги и не допускают неприятных хаков, таких как условные комментарии, поэтому IE9 в режиме application/xhtml+xml не поддерживает и не поддерживает их.

+0

Я не могу найти, что условные комментарии работают нормально: http://wademcgillis.com/example.xhtml –

+0

Интересно. У вас установлен Apache для работы с файлами .xhtml в качестве типа контента 'application/xhtml + xml', поэтому применяются те же проблемы с обработкой XML. Обратите внимание, что это означает, что IE8 и ранее вообще не могут обрабатывать файлы .xhtml. – Alohci

+0

+1 для правильного объяснения. -½ за утверждение, что «Обычно файлы XHTML обслуживаются с типом содержимого text/html». Хотя верно, что так принято это делать, приложение application/xhtml + xml для файлов XHTML по-прежнему остается правильным, и не должно быть обескуражено. Браузеры становятся быстрее, когда они могут полагаться на свои синтаксические анализаторы 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> 
Смежные вопросы