检测浏览器是否为IE 7或更低版本?

14

我想给我的网站添加一个重定向功能,让使用IE 7或更低版本的用户跳转到不同的页面。我写了下面这段JavaScript代码,但似乎它已经不起作用了。

<script type="text/javascript">
 if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
  var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number
   if (ieversion<=8)
    window.location = "ie.html" 
   }
   window.location = "main.html"
</script>

2
如果你在测试 IE 7 或更低版本,则你的代码应该写 <=7,而不是 <=8。(除此之外,我认为 p.campbell 给出了一个好答案。) - nnnnnn
1
如何检测Opera/Safari/IE?使用UA字符串进行浏览器嗅探是糟糕的网站设计的明显标志。多年来,人们一直在使用功能或能力检测编写跨浏览器的网站,以适应从IE 5到最新版本的所有浏览器,这并不难。 - RobG
6个回答

11

你的代码总是导致跳转到main.html。即使当代码落在<8,你也会从if语句中退出并设置为main

考虑通过以下方法重构代码:

  • 在将ie设置后添加一个return语句。

或者

var redir="main.html";
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
{ 
   var ieversion=new Number(RegExp.$1);
   if (ieversion<=8)
   {
      redir = "ie.html";
   }
}
window.location = redir;

9

请查看条件注释,这与IT技术有关。

因此,您可以执行以下操作:

<script type="text/javascript">
    <!--[if (!IE)|(gt IE 7)]>
      window.location = "ie.html" 
    <![endif]-->

    <!--[if lt IE 8]>
      window.location = "main.html"
    <![endif]-->
</script>

我本可以这样做,但我正在尝试使用比IE条件注释更优雅的东西。 - user401231
3
通过忽略这个答案,你正在以"优雅"的代价换取可靠性。使用UA嗅探非常脆弱,很可能会对你产生不良影响。 - user1385191
1
不确定条件注释有什么不够优雅的地方。它们是有效的。 - Kon
文件顺序不正确,非IE浏览器也无法执行任何语句。然而,条件注释是解决问题的方法。 - Tim Down
条件注释仅适用于HTML,我没有在HTML中使用JS,它们在外部文件中。条件注释是最糟糕的选择。 - mare
1
@mare,我不同意。有些解决方案更糟糕,经常会在浏览器或JS库版本升级时出现问题。您可以将100%的JS放在外部文件中,并仍然使用条件注释来呈现某些元数据元素,以供您的外部JS读取。我不是说这是最好的解决方案,但也不是一个坏选择。有志者事竟成。 :) - Kon

3

条件注释(如@Kon所建议的)是正确的方法。以下是一个可行的实现:

<script type="text/javascript">
    var ie7OrLower = false;
</script>

<!--[if lte IE 7]><script type="text/javascript">
   ie7OrLower = true;
</script><![endif]-->

<script type="text/javascript">
    window.location = ie7OrLower ? "ie.html" : "main.html";
</script>

2
您可以使用此正则表达式进行测试:(MSIE\ [0-7]\.\d+) 以下是如何使用它的JavaScript示例:
if (/(MSIE\ [0-7]\.\d+)/.test(navigator.userAgent)) {
    // do something
}

1

我一直使用 Quirks Mode 的 BrowserDetect.js 来进行浏览器检测。看看这个 - http://www.quirksmode.org/js/detect.html

一旦你引用了 .js 文件,你就可以访问很多信息:

//Browser Name
BrowserDetect.browser
//Browser Version
BrowserDetect.version
//Operating system
BrowserDetect.OS

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接