как показать специальную страницу для пользователей IE6, запрашивающих их обновление в ASP.NET MVC - PullRequest
12 голосов
/ 16 сентября 2009

Как и любой другой веб-разработчик, я разочарован тем, что взломал код моего сайта для работы с IE 6. Поэтому решил отказаться от поддержки IE 6 и попросить их вежливо перейти на IE 7+ или Firefox. *

Можете ли вы предложить мне, как обнаружить пользователей IE6 и отобразить специальную страницу с подробностями обновления в ASP.NET MVC?

Хорошая идея - обрабатывать это на стороне сервера? или вы рекомендуете использовать любой клиентский скрипт, такой как jQuery, чтобы справиться с этим?

Ответы [ 5 ]

20 голосов
/ 04 февраля 2011

Самое простое - создать атрибут фильтра действий. Затем вы можете просто пометить ваши контроллеры (или добавить к глобальным фильтрам в MVC3).

Вот атрибут:

/// <summary>
/// If the user has IE6, this will present them with a page that tells them they have a crappy old browser.  It gives them options to upgrade but they can also 
/// choose to proceed anyway.  This check is done only when they first visit the site.  A cookie also prevents unnecessary future checks, so this won't slow the app down.
/// </summary>
public class WarnAboutIE6Attribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        //this will be true when it's their first visit to the site (will happen again if they clear cookies)
        if (request.UrlReferrer == null && request.Cookies["browserChecked"] == null)
        {
            //give old IE users a warning the first time
            if (request.Browser.Browser.Trim().ToUpperInvariant().EqualsExact("IE") && request.Browser.MajorVersion <= 6)
            {
                filterContext.Controller.ViewData["RequestedUrl"] = request.Url.ToString();

                filterContext.Result = new ViewResult { ViewName = "InternetExplorerOldWarning" };
            }

            filterContext.HttpContext.Response.AppendCookie(new HttpCookie("browserChecked", "true"));
        }

    }
}

Этот атрибут проверяет IE6, и, если он присутствует, он отображает представление «InternetExplorerOldWarning», которое необходимо создать. Это предупреждение отображается только один раз с помощью файла cookie. Конечно, вы можете настроить это так, как хотите. На мой взгляд, я дал им ссылки для обновления или загрузки других браузеров. Я также дал им возможность продолжить работу с IE6. Проверьте это:

            <h3>
        Your Internet Explorer is Outdated</h3>
  <div class="warning">Your version of Internet Explorer is a bit too old and unfortunately won't work well with this site.</div>
  <p>Have no fear.  You have options and in just a few minutes you can be rocking out in our app:</p>
  <ul>
  <li>If you have FireFox, Safari, or Google Chrome already on your computer use one of them for Takeoff instead.</li>
  <li>Upgrade to the <a href="http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx">latest Internet Explorer.</a>  You can download and install right away.  Even Microsoft recommends you do this.</li>
  <li>Download an Internet Explorer alternative.  We recommend <a href="http://www.mozilla.com/en-US/firefox/firefox.html">FireFox</a>, <a href="http://www.apple.com/safari/download/">Safari</a>, or <a href="http://www.google.com/chrome">Google Chrome</a>.  Choose one or all because each is great!</li>
  </ul>

  <p>This warning page will only show once.  If you really want to use Takeoff with your current Internet Explorer, we won't stop you.  But beware, it will probably look like garbage!</p>
  <p>Whatever dude, I want to <a href="@ViewData["RequestedUrl"] ">my old, insecure, scary, dangerous version</a> of Internet Explorer.</p>

</div>
13 голосов
/ 26 октября 2009

Вы можете сделать обнаружение из кодировки:

// ASP.net MVC C# example 
if (Request.Browser.Browser == "IE" && Request.Browser.Version.ConvertTo<float>() < 7.0)
{   
    // output message to urge user to upgrade to latest IE browser 
}
2 голосов
/ 16 сентября 2009

Было бы ужасной практикой специально обслуживать другую нефункциональную страницу для IE6. Для начала, если вы находитесь в Великобритании, вы, скорее всего, столкнетесь с DDA, но в течение нескольких секунд (в зависимости от вашей ситуации, конечно) вы действительно не хотите останавливать 20-25% ваших пользователей, использующих ваш сайт. .

Многие люди вынуждены использовать IE6 на работе. Излишне бесить их не имеет смысла для бизнеса.

Тем не менее, нет причин для того, чтобы ваш сайт выглядел идеально пиксельным. Вы можете обнаружить, что они используют IE6 на стороне сервера с Request.UserAgent и отобразить ненавязчивое сообщение в верхней части вашей домашней страницы (или в верхней части каждой страницы), позволяющее пользователям знать, что их браузер очень старый, и вы не больше не могу это поддержать. Затем вы можете либо обслуживать конкретную таблицу стилей IE6 (очень урезанную), либо, если проблемы с отображением в IE6 не настолько серьезны, чтобы сделать ваш сайт непригодным для использования, вы можете просто не беспокоиться о них.

Когда я сейчас работаю в Интернете, я беру дополнительную плату за поддержку IE6.

1 голос
/ 16 сентября 2009

Показывать совершенно другую страницу для IE 6 немного жестко, ИМХО, если только вы не хотите блокировать / перенаправлять, нет необходимости проверять это на стороне сервера.

« Вежливо » будет означать, что вы проверяете браузер на стороне клиента и показывает сообщение с предупреждением / напоминанием для обновления. Люди на stoplivinginthepast.com создали стандартную логику, чтобы сделать это на основе условных комментариев (они предлагают вам показать сообщение в верхней части целевой страницы).

http://www.stoplivinginthepast.com/get-the-code/ http://www.stoplivinginthepast.com/wp-content/uploads/2009/02/warninggrab.jpg

Изображение предоставлено: http://www.stoplivinginthepast.com/

0 голосов
/ 01 марта 2014

Я столкнулся с этим ответом из-за проблем с IE8 и менее. Я хотел, чтобы пользователи использовали IE9 или более позднюю версию, но с режимом совместимости в IE9, который отображается как IE7.

Итак, добавление ответа Стиву Поттеру и его вдохновление по следующей ссылке - http://social.msdn.microsoft.com/Forums/vstudio/en-US/ae715fd2-1ddd-46f7-8c26-9aed6b2103f1/how-to-detect-compatibility-mode-in-ie-any-version?forum=netfxjscript.

Я изменил свой код на

public class WarnAboutIeAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        var isIe9Compatible = false;

        if (request.UrlReferrer == null)
        {
            if (request.Browser.Browser.Trim().ToUpperInvariant().Equals("IE") && request.Browser.MajorVersion <= 8)
            {
                var useragent = request.Headers.GetValues("User-Agent"); 
                if (useragent != null) isIe9Compatible = useragent[0].Contains("Trident/5.0");
                if (!isIe9Compatible) filterContext.Result = new ViewResult {ViewName = "_InternetExplorerOldWarning"};
            }
        }
    }
}

Добавление в надежде, что кому-то поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...