IE11中的XPathEvaluator检测

时间:2014-11-13 16:08:55

标签: javascript xpath internet-explorer-11

我看到IE 11中不支持XPathEvaluator但是我想知道是否有适当的检测机制来检查它是否存在,如果不回退到IE中的selectSingleNode方法。

类似于这一点但是每当我以这种方式检查XPathEvaluator时它会在IE 11中爆炸但在Firefox / Chrome中运行

  if (XPathEvaluator) {

      var xpe = new XPathEvaluator();
      ...... evaluation logic
      return results.singleNodeValue;
  }
  else {
      return xmlDoc.selectSingleNode(elPath);
  }

以前的逻辑过去依赖于window.ActiveXObject的存在来调用selectSingleNode,但是IE 11中的属性已被删除,导致XPathEvaluator逻辑被命中。

我宁愿检测此功能是否存在,并且不会检查浏览器版本,因为功能和功能会不断变化。

这是我的简单测试用例。

IE 11将警告我不是IE弹出窗口,然后在XPath上爆炸。

FF / Chrome会提示我不是IE弹出,然后警告XPathEvaluator是一个去。

function selectSingleNode()
{
    // previous logic relied on this to call XPathEvaluator
    if(window.ActiveXObject)
    {
        alert('Im IE');
    }
    else
    {
        alert('I am Not IE');
    }

    // I wanted to do something like this.
    if(XPathEvaluator)
    {
        alert('XPathEvaluator is a go');
    }
    else
    {
        alert('XPathEvaluator is a no go');
    }
}

1 个答案:

答案 0 :(得分:1)

如果您想使用某种方法,请检查它,如果您想使用selectSingleNode,请执行

if (typeof xmlDoc.selectSingleNode != 'undefined') {
  // now use selectSingleNode method here
}

我不确定为什么要检查XPathEvaluator,如果要检查文档节点上是否有evaluate方法使用W3C DOM Level 3 XPath API然后执行< / p>

if (typeof xmlDoc.evaluate != 'undefined') {
  // now use evaluate method here
}

所以你可以一起检查

if (typeof xmlDoc.evaluate != 'undefined') {
  // now use evaluate method here
}
else if (typeof xmlDoc.selectSingleNode != 'undefined') {
  // now use selectSingleNode method here
}