2009-09-16 6 views
12

Tout comme tous les autres développeurs Web, je suis frustré de pirater mon code de site pour travailler avec IE 6. Alors décidé d'abandonner le support pour IE 6 et leur demander poliment de passer à IE 7+ ou Firefox.comment afficher la page spéciale pour les utilisateurs IE6 qui les demandent de mettre à niveau dans ASP.NET MVC

Pouvez-vous me suggérer comment détecter les utilisateurs IE6 et afficher une page spéciale montrant les détails de la mise à niveau dans ASP.NET MVC?

La gestion de ce script côté serveur est-elle une bonne idée? ou recommandez-vous d'utiliser un script côté client comme jQuery pour gérer cela?

Répondre

20

chose est l'OMI pour créer un Easiest attribut de filtre d'action. Ensuite, vous pouvez simplement marquer vos contrôleurs avec (ou ajouter aux filtres globaux dans MVC3).

est ici l'attribut:

/// <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")); 
     } 

    } 
} 

Ce contrôle d'attributs pour IE6, et si elle est présente, elle rend le « InternetExplorerOldWarning » vue, que vous devez créer. Il ne présente cet avertissement qu'une seule fois en utilisant un cookie. Vous pouvez bien sûr modifier ce que vous voulez. À mon avis, je leur ai donné des liens pour mettre à jour ou télécharger d'autres navigateurs. Je leur ai également donné l'opportunité de continuer avec IE6. Check it out:

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

Solution très propre. Merci beaucoup. – Gopinath

+0

N'avait pas besoin du code complet, mais l'accès aux informations du navigateur ('request.Browser.Browser' et' request.Browser.MajorVersion') était le point. Bon travail. – nrod

1

Montrer une page totalement différente pour IE 6 est un peu dur à mon humble avis, sauf si vous voulez bloquer/rediriger il n'est pas nécessaire de valider cela côté serveur. "Politiquement" signifie que vous validez le navigateur du côté client et affichez un message d'alerte/de rappel pour la mise à niveau. Les gens à stoplivinginthepast.com have build a standard logic to do this basé sur conditional comments (ils suggèrent que vous montriez un message sur le dessus de votre page de destination).

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

avec la permission de l'image: http://www.stoplivinginthepast.com/

2

Il serait terrible pratique pour servir spécifiquement une autre page non fonctionnelle à IE6. Pour commencer, si vous êtes au Royaume-Uni, vous risquez de rencontrer le DDA, pendant quelques secondes (en fonction de votre situation bien sûr) vous ne voulez vraiment pas arrêter 20-25% de vos utilisateurs en utilisant votre site .

Beaucoup de gens sont contraints d'utiliser IE6 au travail. Les énerver sans raison ne fait pas bon sens des affaires.

Cela dit, il n'y a aucune raison de rendre votre site parfaitement pixelisé. Vous pouvez détecter qu'ils utilisent IE6 côté serveur avec Request.UserAgent et afficher un message discret en haut de votre page d'accueil (ou en haut de chaque page) permettant aux utilisateurs de savoir que leur navigateur est très vieux et vous ne t le supporter plus. Ensuite, vous pouvez soit servir une feuille de style IE6 spécifique (très réduite), ou si les problèmes de rendu d'IE6 ne sont pas si graves que de rendre votre site inutilisable, vous ne pouvez pas vous en préoccuper.

Lorsque je fais du travail sur Internet ces jours-ci, je charge des frais supplémentaires pour soutenir IE6.

13

Vous pouvez le faire la détection du codage:

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

Je suis tombé sur cette réponse en ayant des problèmes avec IE8 et moins. Je voulais que les utilisateurs à l'utilisateur IE9 ou plus tard, mais avec le mode de compatibilité sur IE9 apparaissant comme IE7.

Donc en ajoutant à Steve Potters réponse et inspiré par le lien suivant - 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.

j'ai changé mon code pour

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"}; 
      } 
     } 
    } 
} 

Ajout dans l'espoir qu'il aide à quelqu'un.

Questions connexes