Как я могу показать сообщение браузерам IE6 / IE7 для обновления до IE8, чтобы IE8 не показывал предупреждение IE7?

StackOverflow https://stackoverflow.com/questions/822508

Вопрос

Я хочу разрешить доступ к моему сайту только пользователям с 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 и вставьте его на сайт - я слышал, что он получает все работает, как вы не поверите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top