就像其他所有的Web开发人员一样,我很沮丧地破解我的网站代码以使用IE 6.因此决定放弃对IE 6的支持并礼貌地要求他们升级到IE 7+或Firefox。
您能否建议我如何检测IE6用户并显示一个显示ASP.NET MVC中升级详细信息的特殊页面?
在服务器端处理这个脚本是个好主意吗?或者你建议使用像jQuery这样的客户端脚本来处理这个问题吗?
答案 0 :(得分:20)
最简单的事情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'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>
答案 1 :(得分: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
}
答案 2 :(得分:2)
专门为IE6提供不同的非功能性页面是一种可怕的做法。对于初学者来说,如果你在英国,你很可能会与DDA发生冲突,几秒钟(当然,取决于你的情况),你真的不想只停止20-25%的用户使用你的网站
许多人被迫在工作中使用IE6。不必要地惹恼他们并不具备商业意义。
那就是说,没有理由让你的网站看起来像素完美。你可以通过Request.UserAgent检测到他们正在使用IE6服务器端,并在主页顶部(或每页顶部)显示一条不显眼的消息,让用户知道他们的浏览器已经很老了你不知道再支持它了。然后你可以提供一个特定的IE6样式表(非常简化),或者如果IE6的渲染问题没有那么严重到使你的网站无法使用,你就不用担心它们了。
这些天我在做网络工作时,我会额外收费以支持IE6。
答案 3 :(得分:1)
为IE 6显示一个完全不同的页面是有点苛刻的恕我直言,除非你想阻止/重定向,没有必要在服务器端验证这一点。
“礼貌地”意味着您在客户端验证浏览器并显示要升级的警报/提醒消息。 stoplivinginthepast.com have build a standard logic to do this的人根据conditional comments(他们建议您在着陆页顶部显示一条消息)。
答案 4 :(得分:0)
我遇到了这个问题,因为IE8的问题更少了。我希望用户使用IE9或更高版本,但IE9上的兼容模式显示为IE7。
因此,添加到Steve Potters的答案并受以下链接的启发 - 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"};
}
}
}
}
希望它可以帮助某人。