假设我有以下结构:
<html>
<head></head>
<body>
<div id="myDiv"></div>
</body>
</html>
通过重新定义一些原生 JavaScript 函数,我可以让 myDiv
无法找到吗?
例如,我可以这样做:
window.HTMLDocument.prototype.getElementById = (function() {
var oldefinition = window.HTMLDocument.prototype.getElementById;
return function() {
var returnValue = oldefinition.apply(this, arguments);
if (returnValue && returnValue.id === 'myDiv') {
return oldefinition.call(this, 'blablabla');
} else {
return returnValue;
}
}
})();
我可以对其他功能做同样的事情,例如:
querySelector
querySelectorAll
getElementsByTagName
getElementsByClassName
- 等等
这有效,但 div 仍然可以通过调用:
document.body.children[0]
那有没有办法让我的div无法找到,也就是我可以重新定义children
字段的值吗?
最佳答案
好吧,这个尝试似乎还不错 - 至少对于 document.body.children
来说是这样。我在 MDN 的网站上测试了以下代码的变体,以隐藏文档正文的所有直接子脚本标记。
它的工作方式是我们告诉 document.body
使用一个名为 children
的新属性。然后我们返回 children
的原始内容,减去我们不需要的内容。
var oldchildren = document.body.children;
Object.defineProperty(document.body, 'children', {
get() {
var lst = [];
for (var item of oldchildren) {
if (!(item.tagName === "div" && item.id === 'myDiv'))
lst.push(item);
}
return lst;
}
});
任何引用 document.body.children
的代码在此代码运行后都不会看到 div
。此代码可能会导致您网站上的其他代码出现异常。
关于javascript - 我可以通过重新定义 native 函数从 DOM 中创建一个元素 "unfindable"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529973/