我正在编写一段代码,要求DOM
网站在任意 JavaScript 运行时保持冻结状态。属性更改很好,但我无法更改页面的原始标签结构!
我知道在 JavaScript 中有一个基本数量的函数可以修改DOM
:
appendChild( nodeToAppend )
cloneNode( true|false )
createElement( tagName )
createElemeentNS( namespace, tagName )
createTextNode( textString )
innerHTML
insertBefore( nodeToInsert, nodeToInsertBefore )
removeChild( nodetoRemove )
replacechild( nodeToInsert, nodeToReplace )
我最初的想法是简单地将这些函数覆盖为无操作:
>>> 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 不被修改?