diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js index a2936b2143..b82668fc7c 100644 --- a/chrome/content/zotero/xpcom/utilities.js +++ b/chrome/content/zotero/xpcom/utilities.js @@ -974,18 +974,29 @@ Zotero.Utilities = { throw new Error("First argument must be either element(s) or document(s) in Zotero.Utilities.xpath(elements, '"+xpath+"')"); } - try { - var xpathObject = rootDoc.evaluate(xpath, element, nsResolver, 5, // 5 = ORDERED_NODE_ITERATOR_TYPE - null); - } catch(e) { - // rethrow so that we get a stack - throw new Error(e.name+": "+e.message); - } - - var newEl; - while(newEl = xpathObject.iterateNext()) { - // Firefox 5 hack - results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrap(newEl) : newEl); + if(!Zotero.isIE || "evaluate" in rootDoc) { + try { + var xpathObject = rootDoc.evaluate(xpath, element, nsResolver, 5, // 5 = ORDERED_NODE_ITERATOR_TYPE + null); + } catch(e) { + // rethrow so that we get a stack + throw new Error(e.name+": "+e.message); + } + + var newEl; + while(newEl = xpathObject.iterateNext()) { + // Firefox 5 hack + results.push(isWrapped ? Zotero.Translate.DOMWrapper.wrap(newEl) : newEl); + } + } else if("selectNodes" in element) { + // We use JavaScript-XPath in IE for HTML documents, but with an XML + // document, we need to use selectNodes + var nodes = element.selectNodes(xpath); + for(var i=0; i