можно ли использовать обнаружение браузера на стороне сервера для обеспечения изящной деградации семантических тегов html5 в IE7 и IE8


Хорошо известно, что семантические теги html5 не будут изящно деградировать в IE ниже версии 9 без некоторой помощи в виде условного фрагмента javascript.Это означает, что пользователи с IE7 и выключенным javascript увидят что-то уродливое вместо вашего блестящего сайта html5.

Я подумал о том, как решить эту проблему, и пришел к следующему подходу: на стороне сервера (скажем, в представлении mvc) есть что-то в строках:

    OutputHtml5WithFallback("<header>MyHeader</header>", "<div>MyHeader</div>");

И пусть браузер принюхивается код, чтобы выяснить, пришел ли запрос от IE7 или IE8. Если браузер распознается как IE7 или IE8, вывод html будет

    <div>MyHeader</div>

Иначе

    <header>MyHeader</header>        

Похоже, что это своего рода защита от подделки-если какой - либо браузер притворяется IE7, он получит разметку html5 без каких-либо элементов html5. Меня больше всего беспокоит то, что этот подход может быть обескуражен поисковыми системами (поскольку для разных агентов пользователей используется разный html).

Не могли бы вы указать на другие недостатки, которыми я могу быть пропал?

3 3

3 ответа:

Вам нужно будет внимательно относиться к кэшированию прокси, иначе прокси может кэшировать вашу страницу IE7 и обслуживать ее в более современных браузерах, или кэшировать вашу страницу HTML5 и обслуживать ее в IE7, и ваш сервер никогда не получит возможности предоставить правильную версию.

Если ваш сайт уже не требует, чтобы ваши HTML-страницы не кэшировались, все, что вы делаете, чтобы избежать этой проблемы, увеличит нагрузку на ваш сервер.

Пока ваш стиль не зависит от новых элементов HTML5, вы можете просматривать HTML5 в IE7 без проблем.

Таким образом, вы можете использовать:

<header><div class="header"></div></header>
Это не очень красиво, но это избавит вас от кода на стороне сервера.

Edit: см.комментарий bfrohs. Вы все еще должны использовать , чтобы получить правильный стиль в конце концов.

Тем не менее, я не думаю, что переход на серверные длины для shim в деградации HTML5-хорошая идея. Если кто-то все еще использует IE6/7/8 и по умолчанию отключил JavaScript, подавляющее большинство страниц в интернете (от Facebook до New York Times) все равно не будут функциональными для них .


В HTML неизвестные элементы (например, <blah>) являются автоматически рассматриваются встроенные элементы. Чтобы исправить для более старых версий IE, вам нужно установить все новые элементы уровня блока в display: block;, что и делает CSS:

article,aside,canvas,details,figcaption,figure,
footer,header,hgroup,menu,nav,section,summary { 
    display:block;
}

Это решает 99% проблем с версткой HTML5 в старых браузерах. (Другие, такие как аудио и видео с элементами управления, могут все еще нуждаться в работе или другом резервном механизме, чтобы быть действительно полезными)