【发布时间】:2012-06-13 11:08:54
【问题描述】:
如果我们网站的用户使用的是 v9 之前的 Internet Explorer 版本,我想将他们退回到错误页面。支持IE pre-v9 不值得我们花时间和金钱。所有其他非 IE 浏览器的用户都很好,不应被退回。这是建议的代码:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
// navigate to error page
}
}
这段代码能解决问题吗?
阻止一些可能会出现在我面前的cmets:
- 是的,我知道用户可以伪造他们的
useragent字符串。我不担心。 - 是的,我知道编程专业人员更喜欢嗅探功能支持而不是浏览器类型,但我认为这种方法在这种情况下没有意义。我已经知道所有(相关的)非 IE 浏览器都支持我需要的功能,而所有
pre-v9 IE浏览器都不支持。在整个网站上逐个检查功能将是一种浪费。 - 是的,我知道有人尝试使用
IE v1(或 >= 20)访问该站点时不会将“badBrowser”设置为 true,并且警告页面也不会正确显示。这是我们愿意承担的风险。 - 是的,我知道微软有“条件 cmets”,可用于精确的浏览器版本检测。从
IE 10起,IE 不再支持条件 cmets,因此这种方法完全没用。
还有其他需要注意的明显问题吗?
【问题讨论】:
-
“支持 IE pre-v9 不值得我们花时间和金钱”。我希望我能做到。
-
基于第 [2] 点,我不建议使用 Modernizr (en.wikipedia.org/wiki/Modernizr) - 每个人都必须在某处画一条线 - 但 IE9 确实看起来像一条高线
-
有条件的 cmets 只是普通的 cmets。只有 IE 将它们解释为特殊的。 IE10+ 不会再这样做了。
-
条件 cmets 将被 IE 10 视为与非 IE 浏览器完全相同。它们是有效的 HTML cmets,因此将被视为有效。我同意 Andreas 的观点,并认为有条件的 cmets 是要走的路。
-
官方文档说 IE10+ 不支持条件 cmets:blogs.msdn.com/b/ie/archive/2011/07/06/… - 感谢:stackoverflow.com/a/9900331/320399
标签: javascript internet-explorer user-agent browser-detection