Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Javascript根据浏览器有条件地运行?_Javascript_Html_Internet Explorer - Fatal编程技术网

如何使Javascript根据浏览器有条件地运行?

如何使Javascript根据浏览器有条件地运行?,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,如果浏览器不是IE或是IE 9+,我希望运行一段Javascript。如果浏览器是IE8或更低版本,则应运行另一段Javascript 我尝试使用: 但是IE6和IE7仍然在执行代码1。Firefox正在执行代码2 请不要用jQuery 编辑:实际上,我的条件表达式是错误的。但仍然采用了所选答案中提出的功能检测。您可以通过javascript而不是HTML中的检查来实现这一点。在JS中,您有属性navigator.userAgent,它为每个浏览器(甚至是不同兼容版本的IE)返回一个唯一的字

如果浏览器不是IE或是IE 9+,我希望运行一段Javascript。如果浏览器是IE8或更低版本,则应运行另一段Javascript

我尝试使用:


但是IE6和IE7仍然在执行代码1。Firefox正在执行代码2

请不要用jQuery


编辑:实际上,我的条件表达式是错误的。但仍然采用了所选答案中提出的功能检测。

您可以通过javascript而不是HTML中的检查来实现这一点。在JS中,您有属性
navigator.userAgent
,它为每个浏览器(甚至是不同兼容版本的IE)返回一个唯一的字符串。因此,我建议在所有浏览器中执行整个JS块,并简单地添加如下内容添加顶部:

if(navigator.userAgent.indexOf('MSIE 9.0') !== -1)
{
  // call IE9 specific method
}
else
{
  // call method for other browsers
}

有关更复杂的方法,请参阅本文,因为jfriend00声明功能检测可能是一个更好的解决方案,但下面是满足您需求的条件注释

<!--[if gte IE 9]> -->
    <script type="text/javascript"> alert('ie9+ and not ie') </script>
<!-- <![endif]-->
<!--[if lt IE 9]>
    <script type="text/javascript"> alert(' < ie9') </script>
<![endif]-->

警报(“ie9+而非ie”)

从您的评论中,听起来您只是想决定是否可以使用
document.getElementsByClassName()
。如果是这种情况,您可以使用如下特征检测:

if (document.getElementsByClassName) {
    // code here that uses getElementsByClassName
} else {
    // code here that doesn't use getElementsByClassName
}

只安装polyfill可能更干净,这样您就可以在旧版本的IE中使用它,而无需先检查。你可以通过谷歌搜索找到很多。这是:

//如果浏览器没有GetElementsByCassName函数,请添加该函数
//限制:仅适用于一个类名
//版权所有:Eike Sendhttp://eike.se/nd
//许可证:麻省理工学院许可证
如果(!document.getElementsByClassName){
document.getElementsByClassName=函数(搜索){
var d=文档、元素、模式、i、结果=[];
if(d.queryselectoral){//IE8
返回d.querySelectorAll(“.”+搜索);
}
如果(d.evaluate){//IE6,IE7
pattern=“../*[包含(concat(“”,@class'),“+search+”)]”;
元素=d.evaluate(模式,d,null,0,null);
while((i=elements.iterateNext()){
结果:push(i);
}
}否则{
elements=d.getElementsByTagName(“*”);
pattern=newregexp(“(^ |\\s)”+search+“(\\s |$)”;
对于(i=0;i
通常,进行功能检测比浏览器检测要好得多。因此,如果您描述了希望在IE9和其他浏览器中使用的功能,而不是在IE8和以下浏览器中使用的功能,那么您可以使用运行时功能检测,它通常比浏览器检测更准确。我想使用document.getElementByClass(),它仅在IE8+中可用,它不处理IE 10、11、12、13等。。。并且没有实现OP要求的逻辑。此外,特征检测可能是解决此问题的更聪明的方法。
if (document.getElementsByClassName) {
    // code here that uses getElementsByClassName
} else {
    // code here that doesn't use getElementsByClassName
}
// Add a getElementsByClassName function if the browser doesn't have one
// Limitation: only works with one class name
// Copyright: Eike Send http://eike.se/nd
// License: MIT License

if (!document.getElementsByClassName) {
  document.getElementsByClassName = function(search) {
    var d = document, elements, pattern, i, results = [];
    if (d.querySelectorAll) { // IE8
      return d.querySelectorAll("." + search);
    }
    if (d.evaluate) { // IE6, IE7
      pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
      elements = d.evaluate(pattern, d, null, 0, null);
      while ((i = elements.iterateNext())) {
        results.push(i);
      }
    } else {
      elements = d.getElementsByTagName("*");
      pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
      for (i = 0; i < elements.length; i++) {
        if ( pattern.test(elements[i].className) ) {
          results.push(elements[i]);
        }
      }
    }
    return results;
  }
}