我正在写一段代码,要求网站的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