2010-02-06 79 views
2

我做了一個Firefox擴展,它使用xmlhttprequest加載一個網頁。如何使用Firefox內部的XPath提取網站信息?

我的擴展有它自己的窗口,與主Firefox一起打開。

我的擴展的想法是加載一個網頁在內存中,修改它,並在firefox中新打開的標籤發佈。

該網頁有一個ID爲「Content」的div。這就是我想修改的div。我一直在用greaseMonkey腳本使用XPath,所以我想在擴展中使用它,但是,我遇到了問題。它似乎不工作,因爲我想要的。我總是得到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

我確實希望它能夠工作,但我錯了。

我知道如何使用string.indexOf(str)然後slice(..)來提取div。但是,這很慢,不方便,因爲我需要修改內容。更改背景,這個div內的許多形式的邊界。對於這項工作,我還沒有看到比評估XPath獲得所有需要的節點更好的方法。

所以主要問題是,如何使用XPath解析加載的網頁在Firefox擴展?

謝謝

回答

1

爲什麼不加載標籤頁,然後修改它的地方,如Greasemonkey的呢?

至於你的代碼,你不會說它在哪裏執行(即什麼是document.location?),但假設它運行在XUL窗口中,這沒有任何意義 - document.createElement不會創建一個HTML元素(但一個XUL div元素,沒有什麼特別的意思),innerHTML不應該爲這樣的元素等工作。

+0

謝謝。我在新標籤中加載了頁面並獲得了它的文檔對象,然後用它執行了所有XPath和修改,並且它運行良好。 – user1651105 2010-02-09 14:29:30