我看到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');
}
}
答案 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
}