Как извлечь информацию о сайте, используя XPath внутри расширения Firefox? - PullRequest
2 голосов
/ 06 февраля 2010

Я сделал расширение Firefox, которое загружает веб-страницу, используя xmlhttprequest.

У моего расширения есть собственное окно, открытое рядом с основным Firefox.

Идея моего расширения - загрузить веб-страницу в память, изменить ее и опубликовать во вновь открытой вкладке в Firefox.

На веб-странице есть div с идентификатором «Content». И это div, который я хочу изменить. Я использовал XPath много в сценариях greaseMonkey, и поэтому я хотел использовать его в своем расширении, однако у меня есть проблема. Кажется, это не работает так, как я хотел бы. Я всегда получаю результат 0.

var pageContents = result.responseText; //webpage which was loaded via xmlhttprequest
var localDiv = document.createElement("div"); //div to keep webpage data
localDiv.innerHTML = pageContents;
// trying to evaluate and get the div i need
var rList = document.evaluate('//div[@id="content"]', localDiv, null XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

Результат всегда равен 0, как я сказал. Теперь я создал локальный div для хранения данных веб-сайта, потому что я не могу разобрать текст с помощью XPath. И document в данном случае это мои расширения XUL document / window.

Я ожидал, что это сработает, но я ошибся.

Я знаю, как извлечь div, используя string.indexOf(str), а затем slice(..). Тем не менее, это очень медленно и не удобно, потому что мне нужно изменить содержимое. Измените фон, границы многих форм внутри этого div. И для этой работы я не видел лучшего способа, чем оценка XPath, чтобы получить все нужные мне узлы.

Итак, главный вопрос: как использовать XPath для анализа загруженной веб-страницы в расширении Firefox?

Спасибо

1 Ответ

1 голос
/ 09 февраля 2010

Почему бы не загрузить страницу во вкладке, а затем изменить ее на месте, как это делает Greasemonkey?

Что касается вашего кода, вы не говорите, где он выполняется (т. Е. Что такое document.location?), Но предполагая, что он выполняется в окне XUL, это не имеет смысла - document.createElement не будет создавать элемент HTML (но элемент div XUL, который не имеет особого значения), innerHTML не должен работать для такого элемента и т. д.

...