我正在寫一段代碼,要求網站的DOM
在任意JavaScript運行時保持凍結狀態。屬性改變是好的,但我不能有任何東西改變頁面的原始標籤結構!將DOM凍結爲JavaScript:將DOM修改函數覆蓋爲空操作
我知道在JavaScript中有功能的基數,可以修改DOM
:
appendChild(nodeToAppend)
cloneNode(true|false)
createElement(tagName)
createElemeentNS(namespace, tagName)
createTextNode(textString)
innerHTML
insertBefore(nodeToInsert, nodeToInsertBefore)
removeChild(nodetoRemove)
replacechild(nodeToInsert, nodeToReplace)
我最初的想法是簡單地覆蓋這些功能,因爲沒有OPS:
>>> document.write('<p>Changing your DOM. Mwwhaha!</p>')
>>> document.write = function() {}
>>> document.write('<p>No-op now!</p>')
雖然這是易於做到這一點的document
對象DOM
修改功能可以從許多不同的JavaScript對象調用!如果我可以在頂層覆蓋這些功能,也許它會工作?從sktrdie
更新:
>>> HTMLElement.prototype.appendChild = function(){}
>>> $("a").get(0).appendChild(document.createElement("div"))
# Still works argh.
>>> HTMLAnchorElement.prototype.appendChild = function(){}
>>> $("a").get(0).appendChild(document.createElement("div"))
# No-op yeah!
所以它似乎我能收集所有DOM
元素的構造函數和對他們在無操作將但這似乎仍然相當混亂......運行
如何保護DOM
免受任意JavaScript的修改?
哇。你在做什麼?真的很好奇。 – 2009-01-09 19:48:01
我有一個代理網頁顯示網站的iFrame。然後,您可以使用我注入的JavaScript選擇網站的各個部分 - 我從您選擇的內容中抓取CSS選擇器。所以`DOM`需要保持不變或者選擇器會中斷(但其他JavaScript應該像平常一樣運行!) – 2009-01-09 19:53:19