2014-11-13 33 views
0

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

事情与此类似但每当我以这种方式检查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

如果你想使用某种方法,然后检查它,所以如果你想使用selectSingleNode然后做

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

我不知道你为什么要检查XPathEvaluator,如果你要检查是否有evaluate方法文档节点上使用W3C DOM Level 3的XPath的API然后做

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 
} 
+0

评价检查是完美的,我没有意识到它。 – crackhaus