Как предотвратить IE9 от рендеринга сайтов интрасети в режиме совместимости
IE9 имеет странную проблему, когда он делает сайты интрасети в режиме совместимости.
Кто-нибудь знает, как предотвратить это?
Примечание. Я не ищу способ предотвратить его на одном компьютере пользователя, но некоторый программный способ предотвратить создание сайта в режиме совместимости.
Ответы
Ответ 1
После исчерпывающего поиска я узнал, как успешно предотвратить создание сайта интрасети в режиме совместимости в IE9 на этом блоге:
Из блога Tesmond
В IE9 есть 2 quirks, которые могут привести к тому, что режим совместимости останется в силе.
Мета-элемент, совместимый с X-UA, должен быть первым мета-элементом в разделе главы.
Вы не можете иметь условные инструкции IE перед мета-элементом X-UA-Compatible.
Это означает, что если вы используете замечательный HTML-Boilerplate Paul Irish, а затем в Интранете с настройками IE9 по умолчанию ваш сайт будет отображаться в режиме совместимости. Вам нужно изменить начало шаблона следующим образом: -
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
в
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
Ответ 2
Следуя ответу @novicePrgrmr, кажется, что обходной путь для IE9 загружает интрасети в IE7-режиме. Хотя это все еще вызывает режим совместимости, я обнаружил небольшую модификацию Paul Irish HTML5-шаблонная разметка, по крайней мере, позволяет IE9 отображать Intranets в стандартах IE9:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
</head>
<!--[if lt IE 7]> <body class="home lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <body class="home lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <body class="home lt-ie9"> <![endif]-->
<!--[if IE 9]> <body class="home lt-ie10"><![endif]-->
<!--[if gt IE 9]><!--> <body class="home"> <!--<![endif]-->
<p>content</p>
</body>
</html>
Это по-прежнему действительный HTML, и существующий CSS, специфичный для IE, должен по-прежнему работать нормально, если вы нацеливаете IE, используя .lt-ie
, а не html.lt-ie
.
Ответ 3
Это можно сделать, добавив простой метатег
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Еще один способ сделать это - добавить этот код в ваш .htaccess файл!
# ----------------------------------------------------------------------
# Better website experience for IE users
# ----------------------------------------------------------------------
# Force the latest IE version, in various cases when it may fall back to IE7 mode
# github.com/rails/rails/commit/123eb25#commitcomment-118920
# Use ChromeFrame if it installed for a better experience for the poor IE folk
<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=Edge,chrome=1"
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
<FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>
Ответ 4
Если вы можете добавить код на домашнюю страницу, вы можете просто добавить это:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
к заголовку вашего веб-сайта.
(Вы также можете использовать <meta http-equiv="X-UA-Compatible" content="IE=9">
, чтобы заставить IE9-Renderer)
Это заставит IE9 отображать в стандартном режиме.
Другой способ - использовать другой тип doctype:
Поместите это в начало своего кода:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">