Как я могу показать сообщение браузерам IE6 / IE7 для обновления до IE8, чтобы IE8 не показывал предупреждение IE7?
-
03-07-2019 - |
Вопрос
Я хочу разрешить доступ к моему сайту только пользователям с IE8 (не IE6, IE7) или другим браузером при входе в систему.
Я последовал за ним: http://code.google.com/p/ie6-upgrade-warning/ Но я также хотел, чтобы это не позволяло пользователям IE7 использовать основной сайт при входе в систему (они могут просматривать общедоступные страницы).) Причина в том, что основное веб-приложение имеет множество эффектов JavaScript, которые будут работать только на 100% в режиме рендеринга IE8 (или любом другом браузере, кроме IE.)
Проблема с изменением предупреждения об обновлении ie6 на ie7 заключается в том, что, похоже, IE8 отобразил мою веб-страницу в режиме рендеринга IE7 и "лжет" о том, что он ie7, и запускает код таблицы стилей IE7.
Итак, как я могу заставить IE8 всегда отображать мою страницу в режиме IE8?
Решение
Используйте этот тег:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Другие советы
Поправка к примеру АдамСана:
<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->
вот хорошая ссылка, которая предлагает какое-то решение
http://garmahis.com/tools/ie6-update-warning/
лично мне нравится четвертое решение ( http://www.browser-update.org/ )
просто кусок торта
Лично я бы порекомендовал пользователям обновить IE по соображениям безопасности. Я хотел бы использовать условный комментарий для целевых браузеров ниже IE8.
<!--[if lt IE 8]>You are using an outdated version of Internet Explorer. For security reasons you should upgrade your browser. Please go to Windows Updates and install the latest version.<![endif]-->
Это сообщение должно быть ненавязчивым, но изящным. Вы также должны сделать веб-сайт пригодным для использования теми, кто не может обновить свои браузеры.
Вместо того, чтобы пытаться включить режим IE 8+, я использую комбинацию условных комментариев и простой проверки JavaScript. Свойство document.documentMode
было добавлено в IE в версии 8, поэтому, если оно вообще существует (независимо от значения, хотя ДОЛЖНО быть 7 с этим кодом), это означает, что мы находимся в режиме совместимости и не должно отображать предупреждение: р>
<!--[if lte IE 7]>
<script>
if (!document.documentMode) { //if documentMode exists, this is a later IE in compatibility mode
showBadBrowserMessage();
}
</script>
<![endif]-->
Вот этот классный скрипт, который работает для всех старых браузеров:
<script type="text/javascript">
var $buoop = {vs:{i:7,f:5,o:12,s:5,n:9}};
$buoop.ol = window.onload;
window.onload=function(){
try {if ($buoop.ol) $buoop.ol();}catch (e) {}
var e = document.createElement("script");
e.setAttribute("type", "text/javascript");
e.setAttribute("src", "//browser-update.org/update.js");
document.body.appendChild(e);
}
</script>
Примечание. Если посетитель игнорирует совет, он некоторое время не будет отображаться.
Больше информации можно найти: здесь
Зависит от того, как вы кодировали свой (X) HTML, но IE8 должен использовать стандартный режим (а не режим IE7), если у вас строгий тип документа:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
вверху ваших HTML-файлов.
Спецификации XHTML 1.0 - документы, строго соответствующие требованиям
Вот хороший пост о том, как различные типы документов и т. д. влияют на режим рендеринга IE8: Общие сведения о режимах совместимости в Internet Explorer 8
Вероятно, лучшим способом было бы обнаружить строку User-Agent браузера пользователя и перенаправить их на страницу с просьбой обновить (или загрузить другой браузер, такой как firefox или chrome), если они используют старую версию IE. Вы можете увидеть примеры пользовательских агентов IE 7 и 8 на этом Запись в блоге разработчика IE . Старые версии IE следуют аналогичному шаблону.
Однако не стоит полагать, что любая строка пользовательского агента, не соответствующая определенному шаблону, является недопустимой. Просто проверьте MSIE ([0-9]) и посмотрите, находится ли он в диапазоне; если он полностью отсутствует, предположим, что браузер поддерживается. Если это MSIE 7, то дополнительно проверьте маркер Trident, указывающий режим совместимости (и, я полагаю, попросите пользователя отключить его). Это позволит другим, будущим начинающим браузерам иметь шанс на рендеринг вашей страницы, не отворачивая их от двери:)
Как уже упоминалось, я бы предложил лучший способ добиться этого - использовать условные комментарии для включения таблицы стилей, характерной для всех версий IE ранее, чем 8:
<!--[if lt IE 8]> Include CSS here <![endif]-->
Включенный CSS может сделать предупреждение видимым или, возможно, включить наложение на странице, которое «блокирует» пользователей. Возможно, было бы неплохо включить некоторые правила, которые скрывают важные элементы на странице, которые в противном случае могли бы сбить пользователя с толку, если они не работают должным образом.
Другой вариант - перенаправить пользователя на другую страницу - я не большой поклонник перенаправлений, но при осторожном использовании они могут стать подходящим решением.
Задумывались ли вы над тем, почему вы блокируете большое количество пользователей с вашего сайта? Возможно, вам следует потратить время на то, чтобы решить, как изящно ухудшить ваш JavaScript или наоборот; «постепенно улучшайте» с помощью JavaScript.
С другой стороны, у вас может быть контроль над системами, используемыми организацией, использующей ваш сайт, и в этом случае вы, вероятно, в порядке, не позволяя людям использовать нестандартные системы.
Вы можете использовать условные комментарии CSS
<!--[if IE 8]>
Special instructions for IE 6 here
<![endif]-->
Используя javascript, вы можете узнать, какой браузер отправил запрос >
<script type="text/javascript">
function detectBrowser()
{
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
if (browser=="Microsoft Internet Explorer")
&& (version>=8))
{
alert("Your browser is good enough!");
}
else
{
alert("It's time to upgrade your browser!");
}
}
</script>
Эта вечеринка закончилась?><
Это так, но я думаю, что приведенную здесь информацию можно немного обновить.
По сегодняшним стандартам, поскольку "сегодня" - это 29 октября 2013 года, вы можете использовать этот мета-тег для запуска последних версий браузера IE и режимов "Документ", а также для запуска установки Chrome Frame от Google в старых версиях:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Это позволяет вам использовать определенные для сервера стили IE6 / 7.Имейте в виду, что я говорю "стили", а не "таблицы стилей", имея в виду:Вы бы использовали только один CSS-файл, и в нем были бы все ваши стили IE6 и IE7.Это делается для минимизации HTTP-запросов...но это уже совершенно другой разговор.
В любом случае, в приведенном выше фрагменте нет необходимости в скриптах или условных комментариях.
Примечание: Google Chrome Frame будет выведен из эксплуатации в январе 2014 года - более подробная информация здесь.
Сама идея, что вы & забанены; " IE 6 и 7 пользователей с вашего сайта смешно. Многие люди не могут обновить свой браузер или установить другой из-за ограничений работы или потому, что они не знают, как. Запрещение этим людям использовать ваш сайт в долгосрочной перспективе обойдется вам просто так.
Либо исправьте свой JavaScript, обойдите проблемы или изящно ухудшите его, чтобы сайт работал хорошо, даже если он выключен.
РЕДАКТИРОВАТЬ: я разместил дополнительную информацию в комментарии ниже, которая действительно должна быть в этом сообщении:
Часто можно обнаружить IE и обойти его. Черт, вы даже можете использовать условные комментарии для загрузки другой версии JavaScript. Использование платформы JS отвлечет различия между браузерами до уровня, о котором вам не нужно беспокоиться. Или просто возьмите IE7.js и вставьте его на сайт - я слышал, что он получает все работает, как вы не поверите.