2012-04-03 123 views
0

我userscript具有下面的代碼提取腳本標記

var scrpt=document.getElementsByTagName('script');

我包括在此要知道每一頁我訪問的腳本數量。

這對一些網站正常工作,但對於一些網站,我沒有得到所有的腳本。我在firefox和chrome中安裝了用戶腳本,問題是兩個瀏覽器中同一站點的腳本數量不同。

例如,當我訪問此鏈接Help extracting text from html tag with Java and Regex

我得到在Firefox的腳本數爲:17箇中和鉻:15

但是當我查看網頁的源文件有22個腳本標籤

請幫我解決這個問題。我甚至試過document.scripts但我仍然得到相同的結果。

我能知道爲什麼會這樣

+0

也許這些其他腳本標記稍後創建。考慮到腳本標記生成可以是動態的,並且從瀏覽器到瀏覽器不同,從執行到執行。如..一個博客軟件,可以列出的所有文章中創建的每一個新的腳本「像在Facebook中」按鈕。 – Tei 2012-04-03 11:34:34

回答

0

你不查看網頁的源文件,你檢查你的DOM,對不對?源代碼包括18 <script>標籤(對我來說,手工計數),但會有其他的動態加載(在控制檯中執行document.getElementsByTagName('script').length時會得到22個)。

那麼你的用戶腳本(Opera或FF的greasemonkey?)何時執行? onDOM不是所有腳本都需要可用。在Opera中,我會鉤上onBeforeScript event上的一個計數器。

您在ff和chrome中獲得不同的計數可能會發生,因爲您沒有查看相同的頁面。返回給你的html會受到登錄狀態(cookie)和瀏覽器字符串的影響。特別是動態加載的腳本可能因瀏覽器而異

+0

我的用戶腳本在頁面加載時執行 – user1275375 2012-04-03 11:49:40

+0

是的,從那時起,當其他腳本插入時不會觸發它。你可以掛鉤一個DOM操縱事件來捕捉它們。你的劇本對號碼有什麼作用? – Bergi 2012-04-03 11:59:59

+0

你可以舉一個使用DOM操作事件來抓腳本的例子嗎? – user1275375 2012-04-04 04:26:16

0

您可以先使用您現有的方法來統計頁面加載時可用的腳本數量,然後通過掛鉤DOMNodeInsertedDOMNodeInsertedIntoDocument來統計由其他腳本插入的腳本(異步加載)。但是,考慮到您的自定義處理程序每​​觸發一次,掛鉤到DOMNodeInserted都會導致頁面非常慢。單。時間。東西被添加到DOM。

我會推薦的是設置你的計算開始說,比它遲半秒。

0

腳本是不是它的標籤的內容,腳本標籤更像是瀏覽器的指令在其SRC下載和評估文件。

腳本標籤可以添加,刪除,並以新的SRC屬性的重複使用,更不用說可以加載並使用Ajax處理腳本。

從某種意義上說,無論從不同來源添加多少個文件,文檔都只有一個一個腳本。