Подтвердить что ты не робот

Как показать специальную страницу для пользователей IE6, требующих их обновления в ASP.NET MVC

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

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

Является ли обработка этого на стороне сервера сценарием хорошей идеей? или вы рекомендуете использовать любую клиентскую сторону script как jQuery для обработки этого?

4b9b3361

Ответ 1

Простейшая вещь IMO - создать атрибут фильтра действий. Затем вы можете просто пометить свои контроллеры (или добавить в глобальные фильтры в 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 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>

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

Я столкнулся с этим ответом, имея проблемы с 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"};
            }
        }
    }
}

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