2011-09-08 136 views
1

上我正在寫一個腳本,應該重寫網頁上的所有鏈接從http://到https:// - 它必須做的客戶端,它運行在一個頁面我不控制。改寫用JavaScript鏈接動態頁面

執行環境:只有新版Chrome,因爲這是一款Chrome擴展的注入腳本,所以沒有跨瀏覽器的後顧之憂。注入發生在document_start(即在DOM開始加載之前)。

我的第一次嘗試是監視DOMContentLoaded,然後遍歷document.links:

document.addEventListener("DOMContentLoaded", rewriteHTTPS, false); 

function rewriteHTTPS() { 
    var links = document.links; 
    for(var i in links){ 
     links[i].href = links[i].href.replace(/http:/, "https:"); 
    } 
} 

不幸的是,我意識到,頁面是動態的,所以更多的鏈接後,該事件被觸發加。

所以,問題是:什麼是捕捉動態DOM頁面中的所有新的和修改鏈接的最佳方式?

+0

有沒有*真的*很好的理由,爲什麼這不是在服務器端完成?如果你的用戶只是關閉Javascript會怎麼樣? –

+0

我正在編寫瀏覽器擴展程序以與外國網站進行交互。很明顯,如果我的用戶使用它,他們已經啓用了javascript。 – Xan

+0

啊,有道理:) –

回答

0

您可能想要考慮傾聽DOMNodeInserted事件,甚至認爲它在IE中的支持似乎很差。該問題的其他答案也可能有所幫助。

+1

IE不是問題;這是一個只有Chrome的問題,它說明了這一點。至於DOMNodeInserted:它並沒有爲所有新的DOM節點觸發,它似乎是每次插入子樹時觸發一次。看起來像我必須遍歷每個這樣的子樹。 – Xan

+0

是的,迭代'event.target.getElementsByTagName('a')'爲'DOMNodeInserted'對我來說是訣竅。謝謝。 – Xan

+0

啊,對不起,我錯過了「僅限Chrome」的部分。很高興它的作品。 –