2010-07-28 3 views
1

Я использую это в расширении Firefox и не могу заставить его работать.Почему документ document.evaluate не работает?

var allLinks = document.evaluate(
         '//a[@href]', 
         window.document, 
         null, 
         XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
         null); 
window.alert(allLinks); 

Это предупреждение [object XPathResult]. Однако всегда возвращается 0. (И, конечно, ссылки на странице).

window.alert(allLinks.snapshotLength); 
+0

Может быть, попробовать 'someXMLDoc.evaluate()' – jerone

ответ

0

Это сработало.

 var allLinks = top.document.getElementById("content").selectedBrowser.contentDocument.evaluate(
          treeView.model[0].xpath, 
          top.document.getElementById("content").selectedBrowser.contentDocument, 
          null, 
          XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
          null); 
+0

Возможно, это был поиск в документе, который является документом самого браузера (т. Е. Основным окном Firefox, 'browser.xul'), а не веб-страницей, которую вы пытались выполнить. – MatrixFrog

+0

Кстати, вы можете использовать 'gBrowser' вместо' top.document.getElementById ('content') '. – MatrixFrog

1

Если это конкретный firefox, и я предполагаю, что вы используете только новые версии .. вы не можете использовать querySelectorAll?

document.querySelectorAll('a[href]') 

Также - вы делаете это, когда DOM полностью загружен? привяжите его к DOMContentLoaded или что-то в этом роде.

document.addEventListener('DOMContentLoaded', fn, false); 

EDIT: Ваш XPath работает для меня. Это было в консоли на существующей загруженной странице. Довольно уверен, что вы спрашиваете, прежде чем что-либо существует.

0

Ответ, который вы не хотите слышать - «работает для меня».

См. this example (оповещения 3 для меня).

Какой браузер и какая версия вы тестируете?

+0

Это в расширение Firefox в 3.6. – Josh

Смежные вопросы