我一直在开发一个 Web 应用程序,我注意到在使用 IE 进行测试时,某些关键显示元素存在重大问题。出于这个原因,我需要阻止 IE 用户访问 Web 应用程序并将他们发送到另一个页面以下载 Firefox 或 Chrome。
我一直在寻找一种方法来做到这一点,但我找不到任何仅适用于 IE 的简单指南。我已经找到并尝试了一些片段,但它们不起作用,因为它们仅用于确定和打印浏览器/操作系统/等。信息。我真的很感谢你的帮助!
我一直在开发一个 Web 应用程序,我注意到在使用 IE 进行测试时,某些关键显示元素存在重大问题。出于这个原因,我需要阻止 IE 用户访问 Web 应用程序并将他们发送到另一个页面以下载 Firefox 或 Chrome。
我一直在寻找一种方法来做到这一点,但我找不到任何仅适用于 IE 的简单指南。我已经找到并尝试了一些片段,但它们不起作用,因为它们仅用于确定和打印浏览器/操作系统/等。信息。我真的很感谢你的帮助!
与其直接阻止它,不如考虑一条信息丰富的消息。顺便说一句,这也是 IE 曾经有用的地方:
<!--[if IE]><div class="info-bar">Your browser is not supported. Some
parts of this application might be non-functional.</div><![endif]-->
一种方法是检查用户代理,您可以通过以下方式访问它$_SERVER['HTTP_USER_AGENT']
if(preg_match('/MSIE/i',$_SERVER['HTTP_USER_AGENT']))
{
// Internet Explorer!
// header("Location: noie.php");
// exit();
}
但是,这并不总是可靠的,因此另一种方法是检查您的功能是否可以通过 javascript 使用,例如:
if(window.localStorage){
// you can use local storage
} else {
// you can't
}
如果这看起来很痛苦(确实如此),我强烈建议您查看Modernizer以帮助您进行特征检测。
在服务器端进行浏览器嗅探是一个坏主意,因为它不可靠,并且不能证明给定浏览器无法使用您的应用程序。
首先,某些浏览器(如 Opera)可以/将发送另一个用户代理,因为它使浏览器更加“兼容”(换句话说,它围绕您计划使用的技术工作)。
其次,并不是因为它是 Internet Explorer,它就一定不能工作。您的尝试还将排除 Internet Explorer 9,它很有可能与您的 Web 应用程序兼容。
相反,您应该在客户端检查您期望的功能是否确实存在。你靠document.getElementsByClassName
?尝试这个:
if (document.getElementByClassName == undefined)
document.location.replace('Unsupported browser URL here');
你靠<canvas>
?尝试这个:
if (document.getElementById('canvas-element').getContext == undefined)
document.location.replace('Unsupported browser URL here');
你依赖复杂的 CSS3 规则?让这样的规则隐藏针对旧版浏览器的消息。
.error-message:not(.unexistant-class) {
/* this rule will be dropped by browsers that don't support the not()
selector */
display:none;
}
简而言之,检查功能而不是用户代理。如果客户端具有您想要的所有功能,则没有理由将其抛在脑后。
好吧,您也可以使用此代码http://www.ie6nomore.com/
您必须检查用户代理标头: