2012-08-03 53 views
1

我必須掃描HTML的遠程內容(Iframe標籤,Img標籤,腳本標籤等),並根據特定的黑名單刪除其中存在的鏈接。 我可以刪除其src指向黑名單URL的Iframe,img,腳本標記。使用javascript刪除HTML中的遠程內容鏈接

var mySpan = document.createElement(\"span\"); 
mySpan.innerHTML = \"\"; 
var block = p[key]; 
var re = new RegExp(block); 
a = document.getElementsByTagName('iframe'); 
for(i=0;i<a.length;i++) 
{ 
    var str = a.item(i).src; 
    if(str.match(re)) 
    { 

      a[i].parentNode.replaceChild(mySpan, a[i]); 
     // + "a.item(i).src = ''; 
    } 
} 

類似的腳本和img標籤。但是可以有更多這樣的標籤。我可以有一個通用的解決方案來遍歷HTML中的所有標籤並查找/替換被列入黑名單的鏈接 我對Javascript非常陌生,因此它的基礎知識有點弱。 this solution可以在我的情況下工作嗎? 我不想使用JQuery等庫,因爲我在Android上這樣做。

+1

+1做得很好,試圖自己想出一個解決方案 – starbeamrainbowlabs 2012-08-03 10:40:39

回答

2

獲取文檔document.getElementsByTagName('*')

中的所有元素一旦你這樣做有什麼用以往的代碼,你找到合適的檢查每一個元素爲您的病情。

這將確保您已經檢查了所有內容,如果您使用的是jQuery,我可以認爲它更簡單。

但是很尊重是純JavaScripter!

2

不要在HTML上使用任何正則表達式 - 使用DOM。

  1. 查看可以包含外部鏈接的標籤上屬性列表的HTML標準。
  2. 循環從document.getElementsByTagName(tagname)返回的集合。
  3. 通過.getAttribute.getAttribute.removeAttribte檢查黑名單和清理屬性(獎勵:您將擁有規範化的數據,無需擔心人們試圖偷偷摸摸地逃跑!)。
  4. 其中許多屬性將被稱爲src,因此您可能想要使用此屬性循環顯示標記名稱"*",以避免未來/偏執狂。或者只是遍歷所有元素的所有屬性。這將會非常緩慢,但仍不能保證有人不會通過使用難以區分純文本的URL(如IP或沒有協議的域名)來避免它,所以我建議不要使用全面掃描。
+0

感謝您的回覆利亞姆,我會檢查並更新答案。我也遇到了執行我的代碼的問題。如果我用我提到的腳本調用browser.loadURL,onPageFinished()的事件,它不會正確執行所有元素。但是,如果我一直在執行該腳本,一旦網站開始加載,直到它完成加載(每1秒運行一次腳本),腳本就可以運行。這可能是什麼原因? – 2012-08-03 10:45:27