2009-09-16 7 views
12

Proprio come ogni altro sviluppatore web, sono frustrato di hackerare il mio codice sito per lavorare con IE 6. Quindi ho deciso di rinunciare al supporto per IE 6 e chiedi gentilmente di passare a IE 7+ o Firefox.come mostrare una pagina speciale per gli utenti IE6 che richiedono loro l'aggiornamento in ASP.NET MVC

Potete suggerirmi come rilevare gli utenti IE6 e visualizzare una pagina speciale che mostra i dettagli di aggiornamento in ASP.NET MVC?

La gestione degli script lato server è una buona idea? o ti consigli di utilizzare qualsiasi script lato client come jQuery per gestirlo?

risposta

20

cosa più facile è IMO per creare un attributo di filtro azione. Quindi puoi semplicemente taggare i controller con esso (o aggiungerli ai filtri globali in MVC3).

Ecco l'attributo: controlli

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

    } 
} 

questo attributo per IE6, e se è presente, rende il "InternetExplorerOldWarning" di vista, che è necessario creare. Presenta questo avvertimento solo una volta utilizzando un cookie. Ovviamente potresti modificare ciò che vuoi. A mio avviso, ho fornito loro collegamenti per aggiornare o scaricare altri browser. Ho anche dato loro l'opportunità di continuare con IE6. Dateci un'occhiata:

  <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

Soluzione molto pulita. Molte grazie. – Gopinath

+0

Non aveva bisogno del codice completo ma l'accesso alle informazioni del browser ('request.Browser.Browser' e' request.Browser.MajorVersion') era il punto. Buon lavoro. – nrod

1

Mostrare una pagina completamente diversa per IE 6 è un IMHO un po 'difficile, a meno che non si voglia bloccare/reindirizzare non è necessario convalidarlo sul lato server.

"Politicamente" significherebbe che si convalida il browser sul lato client e si visualizza un messaggio di avviso/promemoria per l'aggiornamento. Le persone a stoplivinginthepast.com have build a standard logic to do this basate su conditional comments (suggeriscono di mostrare un messaggio nella parte superiore della pagina di destinazione).

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

cortesia Image: http://www.stoplivinginthepast.com/

2

sarebbe terribile pratica di servire specificamente una pagina non funzionale diverso da IE6. Per i principianti, se sei nel Regno Unito, è probabile che tu possa scappare dal DDA, per secondi (a seconda della situazione, ovviamente) non vuoi semplicemente fermare il 20-25% dei tuoi utenti usando il tuo sito .

Un sacco di persone sono costrette a utilizzare IE6 al lavoro. Farle incazzare inutilmente non ha senso per gli affari.

Detto questo, non c'è motivo di rendere il tuo sito un pixel perfetto. È possibile rilevare che stanno usando IE6 lato server con Request.UserAgent e visualizzano un messaggio non invadente nella parte superiore della home page (o nella parte superiore di ogni pagina) che consente agli utenti di sapere che il loro browser è molto vecchio e non si t supportarlo più. Quindi puoi servire uno specifico foglio di stile IE6 (molto ridotto), o se i problemi di rendering di IE6 non sono così severi da rendere inutilizzabile il tuo sito, non puoi semplicemente preoccupartene.

Quando lavoro su internet in questi giorni, addebito extra per supportare IE6.

13

Si può fare la rilevazione della codifica:

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

Mi sono imbattuto in questa risposta nell'avere problemi con IE8 e meno. Volevo che gli utenti utilizzassero IE9 o successivo, ma con la modalità di compatibilità su IE9 che mostra come IE7.

Quindi aggiungere alla risposta di Steve Potters e ispirato dal seguente link - 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.

ho cambiato il mio codice per

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

aggiunta nella speranza che aiuta qualcuno.

Problemi correlati