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

Я хочу разрешить только пользователям IE8 (не IE6, IE7) или другому браузеру доступ к моему сайту при входе в систему.

Я следил: http://code.google.com/p/ie6-upgrade-warning/ Но я также хотел, чтобы пользователи IE7 не могли использовать основной сайт при входе в систему (они могут просматривать общедоступные страницы). Причина в том, что основное веб-приложение имеет множество эффектов JavaScript, которые будут работать только 100 % в режиме рендеринга IE8 (или в любом другом браузере, кроме IE.)

Проблема с изменением предупреждения об обновлении ie6 на ie7 заключается в том, что это выглядело так, как будто IE8 отображал мою веб-страницу в режиме рендеринга IE7 и "лгал" о том, что это был ie7, и запускал код таблицы стилей IE7.

Итак, как я могу заставить IE8 всегда отображать мою страницу в режиме IE8?


person MikeN    schedule 04.05.2009    source источник
comment
Вы действительно хотите исключить около 40-50% пользователей в мире? Шутки в сторону?   -  person cletus    schedule 05.05.2009
comment
Вы не указали, на каком языке программирования хотите это сделать.   -  person Ian Roke    schedule 05.05.2009
comment
К сведению: текущая доля рынка браузеров - w3schools.com/browsers/browsers_stats.asp   -  person STW    schedule 05.05.2009
comment
Если я услышу еще какие-то жалобы от людей, что я не включаю IE6 и IE7, я также исключу IE8!   -  person MikeN    schedule 05.05.2009
comment
Существует множество приложений, предназначенных для ограниченной аудитории. И в этих случаях вы можете указать конкретную программу и минимальную версию. Конечно, это нельзя назвать веб-приложениями. Я называю их IE-приложениями, поскольку IE - это операционная система, в которой они работают.   -  person Chris Noe    schedule 05.05.2009
comment
Иногда вам нужно только разрешить использование новейших браузеров для целевой аудитории.   -  person Daniel Kivatinos    schedule 05.05.2009
comment
Почему кто-то мог предположить, что плакат исключает 50–60–99% пользователей Интернета в мире? Народ, воздержитесь от расплывчатых и нечетких замечаний. Плакат никогда не объявляет целевую аудиторию / рынок своего веб-приложения, неясно, является ли это веб-сайтом или, возможно, интранет-приложением, которому наплевать на мировую зависимость от плохого / архаичного программного обеспечения или даже школьный проект. Не будем обсуждать долю рынка браузеров и все, что мы думаем. Я не знаю убедительного метода, чтобы сделать то, о чем вы просите (может быть, комбинация некоторых из следующих ответов), поэтому сейчас я заткнусь.   -  person yannis    schedule 05.05.2009
comment
@MikeN: вам следует: D заставить всех использовать вместо этого ссылки!   -  person STW    schedule 05.05.2009
comment
@Yoooder: не будь смешным, все знают, что статистика w3schools СОВЕРШЕННО неточна для Интернета в целом. В этом случае WP более точен: en.wikipedia.org/wiki/Usage_share_of_web_browsers   -  person DisgruntledGoat    schedule 10.05.2009
comment
Я прекращаю поддерживать IE8, как только вышел IE 10, и добавляю предупреждение для IE9 для обновления. К сожалению, многие наши пользователи все еще используют Windows XP с IE8 (это максимум, разрешенный для XP). Нам придется научить наших пользователей обновлять IE вместо того, чтобы жаловаться и добавлять всевозможные сообщения! Я не упускаю случая сказать: пожалуйста, обновите свой браузер!   -  person Adrian P.    schedule 05.07.2013


Ответы (13)


Используйте этот тег:

<meta http-equiv="X-UA-Compatible" content="IE=8" />
person Daniel Kivatinos    schedule 04.05.2009
comment
Да, это заставит IE8 правильно отобразить свой сайт в режиме IE8, а JavaScript и условные комментарии будут сообщать об IE8. На стороне сервера также действительна проверка наличия Trident 4.0 в заголовке пользовательского агента. Часто мы предлагаем использовать IE = EmulateIE8 только для того, чтобы гарантировать, что какие-либо страницы режима Quirks не будут случайно переведены в стандартный режим, но этот плакат кажется наркоманом на стандарты и вряд ли будет использовать страницы режима Quirks. - person EricLaw; 18.07.2009

Исправление к примеру AdamSane:

<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->

person Scott    schedule 04.05.2009
comment
Это не сработает, если страница находится в режиме просмотра в режиме совместимости. В этом режиме IE8 использует информацию о версии IE7 для условных комментариев. - person EricLaw; 18.07.2009

вот хорошая ссылка, которая предлагает какое-то решение

http://garmahis.com/tools/ie6-update-warning/

лично мне нравится четвертое решение (http://www.browser-update.org/)

просто кусок пирога

person Naveed    schedule 27.07.2011

Лично я бы рекомендовал пользователям обновить 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]-->

Это сообщение должно быть ненавязчивым, но изящным. Вам также следует сделать сайт доступным для тех, кто не может обновить свои браузеры.

person Tracy    schedule 04.09.2011

Вместо того, чтобы пытаться принудительно включить режим 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]-->
person Jerph    schedule 15.02.2012

Вот этот классный скрипт, который работает во всех старых браузерах:

<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> 

Примечание. Если посетитель проигнорирует совет, он не появится снова в течение некоторого времени.

Дополнительную информацию можно найти: здесь

person star18bit    schedule 22.01.2014

Зависит от того, как вы закодировали свой (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

person Chad Birch    schedule 04.05.2009
comment
Не совсем. Кто угодно может активировать режим совместимости IE8 в любое время, щелкнув глупый значок сломанной страницы. - person NotMe; 11.02.2010

Вероятно, лучшим способом было бы обнаружить строку User-Agent браузера пользователя и перенаправить их на страницу с просьбой обновить (или загрузить другой браузер, такой как firefox или chrome), если они используют старую версию IE. Вы можете увидеть примеры пользовательских агентов IE 7 и 8 на этом запись в блоге разработчика IE. Более старые версии IE следуют аналогичному шаблону.

Одна вещь, которую вам не следует делать, - это предполагать, что любая строка пользовательского агента, не соответствующая определенному шаблону, недействительна. Просто проверьте MSIE ([0-9]) и посмотрите, находится ли он в диапазоне; если он полностью отсутствует, предположим, что браузер поддерживается. Если это MSIE 7, то дополнительно проверьте наличие маркера Trident, указывающего на режим совместимости (и, я полагаю, попросите пользователя отключить его). Это позволит другим будущим браузерам-выскочкам получить шанс отрисовать вашу страницу, не отворачиваясь от них за дверью :)

person bdonlan    schedule 04.05.2009

Как уже упоминалось, я бы предложил лучший способ добиться этого - использовать условные комментарии, чтобы включить таблицу стилей, специфичную для всех версий IE до 8:

<!--[if lt IE 8]> Include CSS here <![endif]-->

Включенный CSS может установить отображение предупреждения или, возможно, включить наложение на странице, которое «блокирует» пользователей. Было бы неплохо включить некоторые правила, которые скрывают важные элементы на странице, которые в противном случае могли бы сбить с толку пользователя, если бы они не работали должным образом.

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

Задумывались ли вы, почему вы закрываете доступ к своему сайту большому количеству пользователей? Может быть, вам стоит потратить время на то, чтобы решить, как изящно ухудшить ваш JavaScript или наоборот; «постепенно улучшать» с помощью JavaScript.

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

person Tom    schedule 04.05.2009

Вы можете использовать условные комментарии CSS

<!--[if IE 8]>
Special instructions for IE 6 here
<![endif]-->
person AdamSane    schedule 04.05.2009
comment
И что делать, использовать CSS, чтобы скрыть все элементы на странице? CSS не может ограничить доступ. - person Chad Birch; 05.05.2009
comment
@AdamSane - это просто условные комментарии - бит «CSS» не нужен. @Chad - не нужно ограничивать доступ - просто сделайте предупреждение видимым и скройте все, что может смутить пользователя. Если пользователь может что-то сломать из-за неправильной работы / работы JavaScript, значит, проблема с приложением. - person Tom; 05.05.2009

Используя 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>
person Luixv    schedule 04.05.2009
comment
Это не сработает, если страница находится в режиме просмотра в режиме совместимости. В этом режиме IE8 использует информацию о версии IE7 для условных комментариев и пользовательского агента JavaScript. - person EricLaw; 18.07.2009

Эта вечеринка окончена? > ‹

Это так, но я думаю, что информацию здесь можно немного обновить.

По сегодняшним стандартам, «сегодня» - это 29 октября 2013 года, вы можете использовать этот метатег для запуска новейших режимов браузера IE и документов и запуска установки Google Chrome Frame в старых IE:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Это позволяет вам использовать определенные стили IE6 / 7 на сервере. Имейте в виду, что я говорю «стили», а не «таблицы стилей», имея в виду: вы бы использовали только один файл CSS, и в нем все ваши стили IE6 и IE7. Это сделано для минимизации HTTP-запросов ... но это совершенно другой разговор.

В любом случае, с приведенным выше фрагментом нет необходимости в скриптах или условных комментариях.

Примечание. Google Chrome Frame будет прекращен в январе 2014 года - подробнее здесь.

person Ricardo Zea    schedule 29.10.2013

Сама идея о том, что вы «запрещаете» пользователям IE 6 и 7 заходить на свой сайт, просто смешна. Многие люди не могут обновить свой браузер или установить другой из-за ограничений в работе или потому, что не знают, как это сделать. Запрет этим людям использовать ваш сайт в конечном итоге будет стоить вам пользователей.

Либо исправьте свой JavaScript, либо обойдите проблемы, либо изящно деградируйте, чтобы сайт работал нормально, даже если он выключен.

РЕДАКТИРОВАТЬ: я разместил дополнительную информацию в комментарии ниже, который действительно должен быть в этом сообщении:

Часто можно обнаружить IE и обойти его. Черт, вы даже можете использовать условные комментарии для загрузки другой версии JavaScript. Использование JS-фреймворка абстрагируется от различий между браузерами до уровня, о котором вам не нужно беспокоиться. Или просто возьмите IE7.js и вставьте его на сайт - я слышал, вещи работают, как вы не поверите.

person Samir Talwar    schedule 04.05.2009
comment
Трудно исправить ваш JavaScript, когда вам нужно либо нейтрализовать функции, либо соответствовать стандартам - IE любит иметь свою собственную интерпретацию стандартного кода, что часто оставляет вам поддержку IE или остального. - person STW; 05.05.2009
comment
Кроме того, я почти уверен, что он не запрещает им доступ к сайту, но говорит им, что, если они используют IE6 / 7, они могут даже не пытаться. Предупреждение ваших пользователей о том, что их несовместимый клиент не поддерживается, является хорошим защитным кодом. - person STW; 05.05.2009
comment
Часто можно обнаружить IE и обойти его. Черт, вы даже можете использовать условные комментарии для загрузки другой версии JavaScript. Использование JS-фреймворка абстрагируется от различий между браузерами до уровня, о котором вам не нужно беспокоиться. Или просто скачайте IE7.js (code.google.com/p/ie7-js) и прикрепите это к сайту - я слышал, это заставляет вещи работать так, как вы не поверите. - person Samir Talwar; 06.05.2009
comment
Я согласен с идеей запретить пользователям IE 6 и 7. Конечно, я захожу немного дальше на одном из наших административных сайтов. Мы запрещаем любые устаревшие версии браузера. Это означает что-то меньшее, чем IE8, Firefox 3.6, Safari 4.0.4 и т. Д. Это сделано из соображений безопасности и производительности. Пока наши клиенты не остались без внимания. - person NotMe; 11.02.2010
comment
Если он такой же, как мы, он может писать не общедоступный веб-сайт, а сайт интрасети, который имеет четкую политику в отношении неподдерживаемого характера браузеров ниже версии X - person PandaWood; 05.08.2014