2014-11-13 62 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