Node 上的 Object.defineProperty 被覆盖后如何恢复到原始状态?
How do I revert Object.defineProperty on Node to the original state after it was overridden?
在我的 javascript(在浏览器中 运行)代码中,第 3 方库已覆盖 Node.childNodes getter/setter.
举个例子,假设我自己用下面的代码完成了:
Object.defineProperty(Node.prototype, 'childNodes', {
get() {
return "overridden!"
},
set(value) {
//
}
});
现在我想 select 一个元素并获取它的子节点。
(document.querySelector('body').childNodes
)
如果我有一个新创建的 iframe,我可以将它用于 select 主 window 中的节点元素吗?
我的目标是在这个 属性 (Node.prototype.childNodes
) 已经被覆盖后能够获取元素上的子节点。
备注
我意识到拥有覆盖 DOM 元素函数的第 3 方库是不好的。但这是我要解决的给定情况。
如果你有一个完整的 iframe Node.prototype.childNodes
,你应该可以做到
Object.defineProperty(Node.prototype, "childNodes",
Object.getOwnPropertyDescriptor(iframe.contentWindow.Node.prototype, "childNodes")
);
恢复主 window 中的 getter/setter。之后,document.body.childNodes
应该又能正常工作了。
在我的 javascript(在浏览器中 运行)代码中,第 3 方库已覆盖 Node.childNodes getter/setter.
举个例子,假设我自己用下面的代码完成了:
Object.defineProperty(Node.prototype, 'childNodes', {
get() {
return "overridden!"
},
set(value) {
//
}
});
现在我想 select 一个元素并获取它的子节点。
(document.querySelector('body').childNodes
)
如果我有一个新创建的 iframe,我可以将它用于 select 主 window 中的节点元素吗?
我的目标是在这个 属性 (Node.prototype.childNodes
) 已经被覆盖后能够获取元素上的子节点。
备注
我意识到拥有覆盖 DOM 元素函数的第 3 方库是不好的。但这是我要解决的给定情况。
如果你有一个完整的 iframe Node.prototype.childNodes
,你应该可以做到
Object.defineProperty(Node.prototype, "childNodes",
Object.getOwnPropertyDescriptor(iframe.contentWindow.Node.prototype, "childNodes")
);
恢复主 window 中的 getter/setter。之后,document.body.childNodes
应该又能正常工作了。