crackhaus
crackhaus

Reputation: 1196

XPathEvaluator Detection in IE11

I see that XPathEvaluator isn't supported in IE 11 however I wanted to know if there's a proper detection mechanism to check for it's existence if not fall back to the selectSingleNode method in IE.

Something similar to this however whenever I check for XPathEvaluator in this fashion it blows up in IE 11 but works in Firefox/Chrome

  if (XPathEvaluator) {

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

Previous logic used to rely on the existance of the window.ActiveXObject to call selectSingleNode however the property has since been removed in IE 11 causing XPathEvaluator logic to be hit instead.

I'd rather detect if this functionality exists and not check for browser versions as features and functionality are constantly changing.

This is my simple test case.

IE 11 will alert the I am not IE popup, and then blow up on the XPath.

FF/Chrome will alert the I am not IE pop and then alert XPathEvaluator is a go.

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');
    }
}

Upvotes: 0

Views: 2286

Answers (1)

Martin Honnen
Martin Honnen

Reputation: 167516

If you want to use a certain method then check for it, so if you want to use selectSingleNode then do

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

I am not sure why you want to check for XPathEvaluator, if you want to check whether there is an evaluate method on the document node to use the W3C DOM Level 3 XPath API then doing

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

So together you can check

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

Upvotes: 1

Related Questions