使用JavaScript检测浏览器类型

11

我正在尝试使用这行代码来检测浏览器类型:IE或Firefox。

alert(isBrowser("Microsoft"));

但是我什么都没有得到,甚至弹出警报也没有。不确定我做错了什么。

检测浏览器类型的最佳实践方式是什么?

8个回答

10

8

试试这个:

alert(navigator.appName);

我喜欢这个答案的简洁性。有人对此有异议吗?因为虽然其他答案更全面(涵盖版本号等),但我只需要浏览器类型。但这里是否存在任何已知问题呢?顺便说一句,我在FF上尝试了它,它说是Netscape! - Duber
6
我在Chrome上试了一下,它也显示netscape :s。 - Toshinou Kyouko
4
Chrome、Firefox 和 Safari 返回名称“Netscape”。 - Aaron Oommen
@user3716264,以及IE11,请在此处检查:http://www.w3schools.com/jsref/prop_nav_appname.asp - Alex Kulinkovich
1
勇敢浏览器和Edge浏览器也返回“netscape”... - oldboy
这是一个很长的故事。每个浏览器都返回Netscape,每个UserAgent都很相似,不仅是appName,只有现在Google考虑重命名。最好遵循供应商名称而不是appName。 - Богуслав Павлишинець

4

我认为jQuery做得很好,当他们支持测试特性而不仅仅是浏览器时。


1
我同意这个理论 - 在实践中大多数情况下也是有效的。但有时你需要了解浏览器。例如,如何在Webkit(Safari或Chrome)中检测右键单击,即使prototype.js在这里也必须使用浏览器检测。 - plodder

3

如果要检测MSIE浏览器,您可以使用JavaScript:

   // This function returns Internet Explorer's major version number,
   // or 0 for others. It works by finding the "MSIE " string and
   // extracting the version number following the space, up to the decimal
   // point, ignoring the minor version number
   <SCRIPT LANGUAGE="JavaSCRIPT">
   function msieversion()
   {
      var ua = window.navigator.userAgent
      var msie = ua.indexOf ( "MSIE " )

      if ( msie > 0 )      // If Internet Explorer, return version number
         return parseInt (ua.substring (msie+5, ua.indexOf (".", msie )))
      else                 // If another browser, return 0
         return 0

   }
   </SCRIPT>

以下是如何在HTML中任何位置调用它的示例:
<SCRIPT LANGUAGE="javascript">
   if ( msieversion() >= 0 )

      document.write ( "This is Internet Explorer" );

   else

      document.write ( "This is another browser" );

   </SCRIPT>

http://support.microsoft.com/kb/167820 http://support.microsoft.com/kb/167820


最好您在此处给出带有代码的真实答案,并提供您获取该信息的链接作为备份。 - Anthon
2
我已经更正了我的答案。 - Alexey Marzan
1
msieversion() >= 0 应该改为 msieversion > 0。否则所有浏览器都会返回“这是Internet Explorer”。 - flyingace
谷歌浏览器返回“这是Internet Explorer”。 - JoachimR

1

关于这个问题,Quirksmode上有一篇非常好的文章:http://www.quirksmode.org/js/support.html

'lajuette'提供的脚本很好,但它并不能让你变得更聪明。同一位作者在上面的链接中解释了他编写脚本的思路,基本上他说:

  • 这不是关于浏览器检测
  • 这是关于对象检测
  • 这会导致知道使用的浏览器。

无论您使用哪种JavaScript框架,这个答案都将为您提供帮助,而我相信它是最好的起点。 - JeroenEijkhof

0

-1
function whereUWantToDetectBrowser(){
        if (navigator.appName == "Microsoft Internet Explorer")
        intExp();
        else
        other();

}
function intExp(){
        //do what you want to do for specifically Internet Explorer
}
function other(){
        //do what you want to do for other browsers
}

这段代码解决了问题。如果你在whereUWantToDetectBrowser()中调用函数,而是在那里编写你的特定代码,这将导致错误。代码将无法运行。因为浏览器检测它必须运行的代码(对于每个浏览器都是特定的)。如果你区分代码,意味着代码在某些浏览器中不起作用,所以你想要为这些浏览器专门编写代码。 因此,在IE中,other()没有效果,就像在其他浏览器中intExp()没有效果一样。


-1

查找IE浏览器类型的最佳且最短的方法是...您可以对其他浏览器类型执行相同操作

if (navigator.appName == "Microsoft Internet Explorer"){

// Ur piece of validation 

}

它只适用于IE 10及更早版本。在此处检查。 - Alex Kulinkovich

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