2009-09-16 4 views
12

में अपग्रेड करने का अनुरोध करने के लिए विशेष पृष्ठ कैसे दिखाया जाए, बस हर दूसरे वेब डेवलपर की तरह, मैं आईई 6 के साथ काम करने के लिए अपने साइट कोड को हैक करने के लिए निराश हूं। इसलिए समर्थन देने का फैसला किया आईई 6 और उन्हें आईई 7+ या फ़ायरफ़ॉक्स में अपग्रेड करने के लिए विनम्रता से पूछें।आईएस 6 उपयोगकर्ताओं के लिए विशेष पृष्ठ दिखाने के लिए उन्हें एएसपी.नेट एमवीसी

क्या आप मुझे सुझाव दे सकते हैं कि आईई 6 उपयोगकर्ताओं का पता कैसे लगाएं और एएसपी.नेट एमवीसी में अपग्रेड विवरण दिखाते हुए एक विशेष पृष्ठ प्रदर्शित करें?

क्या यह सर्वर साइड स्क्रिप्टिंग पर एक अच्छा विचार है? या आप इसे संभालने के लिए jQuery की तरह किसी भी क्लाइंट साइड स्क्रिप्ट का उपयोग करने की सलाह देते हैं?

उत्तर

20

सबसे आसान बात IMO एक कार्रवाई फिल्टर विशेषता तैयार करना है। फिर आप अपने नियंत्रकों को इसके साथ टैग कर सकते हैं (या एमवीसी 3 में वैश्विक फ़िल्टर में जोड़ें)।

यहाँ विशेषता है: IE6 के लिए

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

    } 
} 

यह विशेषता चेक, और अगर यह मौजूद है, यह "InternetExplorerOldWarning" दृश्य है, जिसे आप बनाने के लिए बना देता है। यह केवल कुकी का उपयोग करके इस चेतावनी को प्रस्तुत करता है। आप निश्चित रूप से ट्विक कर सकते हैं कि आप चाहते हैं। मेरे विचार में, मैंने उन्हें अन्य ब्राउज़रों को अपडेट या डाउनलोड करने के लिए लिंक दिए। मैंने उन्हें आईई 6 के साथ जारी रखने का अवसर भी दिया। इसे देखें:

  <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

बहुत साफ समाधान। बहुत बहुत धन्यवाद। – Gopinath

+0

को पूरा कोड की आवश्यकता नहीं थी लेकिन ब्राउज़र की जानकारी तक पहुंच ('request.Browser.Browser' और' request.Browser.MajorVersion') बिंदु था। बहुत बढ़िया। – nrod

1

आईई 6 के लिए एक बिल्कुल अलग पृष्ठ दिखा रहा है थोड़ा कठोर IMHO है, जब तक कि आप ब्लॉक/रीडायरेक्ट नहीं करना चाहते हैं, सर्वर-साइड पर इसे सत्यापित करने की आवश्यकता नहीं है।

"राजनीतिक" का अर्थ यह होगा कि आप क्लाइंट पक्ष पर ब्राउज़र को मान्य करते हैं और अपग्रेड करने के लिए एक चेतावनी/अनुस्मारक संदेश दिखाते हैं। conditional comments पर आधारित stoplivinginthepast.com have build a standard logic to do this पर लोग (वे सुझाव देते हैं कि आप अपने लैंडिंग पृष्ठ के शीर्ष पर एक संदेश दिखाएं)।

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

सौजन्य: http://www.stoplivinginthepast.com/

2

यह विशेष रूप से IE6 के लिए एक अलग गैर कार्यात्मक पेज की सेवा के लिए भयानक अभ्यास होगा। शुरुआत के लिए, यदि आप यूके में हैं तो आप डीडीए से पहले भागने की संभावना रखते हैं, सेकंड के लिए (कोर्स की स्थिति के आधार पर) आप वास्तव में अपनी साइट का उपयोग करके अपने उपयोगकर्ताओं के 20-25% को रोकना नहीं चाहते हैं ।

बहुत से लोगों को काम पर आईई 6 का उपयोग करने के लिए मजबूर किया जाता है। उन्हें अनजाने में पंसद करना अच्छा व्यवसायिक ज्ञान नहीं बनाता है।

उस ने कहा, आपकी साइट को पिक्सेल-परिपूर्ण दिखने का कोई कारण नहीं है। आप यह पता लगा सकते हैं कि वे Request.UserAgent के साथ आईई 6 सर्वर-साइड का उपयोग कर रहे हैं और अपने होम पेज (या प्रत्येक पृष्ठ के शीर्ष पर) पर एक अविभाज्य संदेश प्रदर्शित करते हैं जो उपयोगकर्ताओं को यह बताते हैं कि उनका ब्राउज़र बहुत पुराना है और आप ' अब और इसका समर्थन नहीं करते हैं। फिर आप या तो एक विशिष्ट आईई 6 स्टाइलशीट (बहुत कट-डाउन) की सेवा कर सकते हैं, या यदि आईई 6 के प्रतिपादन मुद्दे आपकी साइट को अनुपयोगी बनाने के लिए इतने गंभीर नहीं हैं, तो आप उनके बारे में परेशान नहीं हो सकते हैं।

जब मैं इन दिनों इंटरनेट-काम कर रहा हूं, तो मैं आईई 6 का समर्थन करने के लिए अतिरिक्त शुल्क लेता हूं।

13

आप कोडिंग से पता लगाने कर सकते हैं:

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

मैं आईई 8 और उससे कम के साथ परेशानी होने में इस उत्तर में आया। मैं चाहता था कि उपयोगकर्ता IE9 या बाद में उपयोगकर्ता को आईई 9 पर दिखाए गए आईई 9 पर संगतता मोड के साथ।

तो स्टीव पॉटर को उत्तर देने और निम्नलिखित लिंक से प्रेरित - 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"}; 
      } 
     } 
    } 
} 

करने के लिए अपने कोड बदल दिया है।

संबंधित मुद्दे