IE10 navigator.userAgent脚本不起作用

时间:2014-01-07 18:09:50

标签: javascript internet-explorer

我试图通过不寻找以IE浏览器为中心的组件来检测浏览器是否是IE,而是寻找包含firefox或chrome的navigator.userAgent。以下脚本在FF和Chrome中运行良好,但在IE10中似乎被忽略。

var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (!is_firefox && !is_chrome) {
    var message = "I'm an IE browser";
} else {
    var message = "I'm not an IE browser";
}

2 个答案:

答案 0 :(得分:1)

虽然我宁愿加入评论中的讨论,但我真的不能。只是重新创建了我的帐户。所以回答你的问题。它可能是失败的原因,并且表明为什么测试userAgent是一个坏主意。

如果您安装了Chrome Frame插件,则会在userAgent字符串中添加“chromeframe”,这会将is_chrome设置为true。如果我没记错的话,我的IE 10配备了Chrome Frame。将userAgent字符串写入控制台并查看。几乎每个人都认为,使用userAgent只是一个坏主意,一般来说浏览器检测也是如此,从长远来看可能并不是最简单的。一旦你了解安装了附加组件就可以修改userAgent字符串,并且用户可以改变它们,你会意识到你的工作已经完成了。

如果您尝试阻止或提供内容,具体取决于用户是否具有IE,则最好使用功能检测或条件注释。您可以使用它来设置js变量,然后执行您需要的任何操作。 这是一种使用条件评论的旧式学校方式

<html>
   <head>
       <!--[if ie 7]>
       <script>var _ie=8;</script>
       <![endif]-->
       <!--[if ie 8]>
       <script>var _ie=8;</script>
       <![endif]-->
       <!--[if ie 9]>
       <script>var _ie=9;</script>
       <![endif]-->
       <script type="text/javascript">
           if(_ie && _ie<9){
              // do something here
              // will not run in any other browser, because _ie is undefined
           }
       </script>
   </head>

此解决方案的缺点是它不能在外部文件中使用,因此条件注释将在页面上,并且检查可以在页面本身或外部文件中。会有错误,因为您首先检查变量是否存在

IE中最简单的方法是检查ActiveXObject,因为它是专有的,并且可能不会去任何地方。所以它很可能是未来的安全。

<script type="text/javascript">
    // test for ie
    var _ie=("ActiveXObject" in window);
</script>

真的,这是通过特征检测进行的浏览器检测,所以它仍然符合标准,加上它的简短和甜蜜。

您也可以参考此document

答案 1 :(得分:1)

为什么不检查IE本身,而不是检查chrome和firefox。

var message;
if(navigator.userAgent.toLowerCase().indexOf('msie') > -1){
   message = "I'm an IE browser";
} else {
   message = "I'm not an IE browser";
}
alert(message);

编辑:====&GT;

尝试检查:

navigator.userAgent.toLowerCase().indexOf('trident') > -1

注意:TRIDENT是IE使用的浏览器引擎。