在你提供的代码中,get
方法尝试获取 innerHTML
的值,但使用了 originalInnerHTML.call(this)
。这里的问题是 originalInnerHTML
其实是 innerHTML
的 setter 方法,而不是 getter,因此调用它会导致未定义(undefined)。
要修复这个问题,你需要保存原始的 getter 和 setter,然后在 getter 中正确地返回当前元素的 innerHTML
值。下面是修复后的代码:
(function() {
var originalInnerHTMLGetter = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").get;
var originalInnerHTMLSetter = Object.getOwnPropertyDescriptor(Element.prototype, "innerHTML").set;
Object.defineProperty(Element.prototype, "innerHTML", {
set: function(value) {
let hookstr = replace_url(value);
console.log("Setting innerHTML to:", value, "hook innerHTML to:", hookstr);
originalInnerHTMLSetter.call(this, hookstr);
},
get: function() {
let value = originalInnerHTMLGetter.call(this);
console.log("Getting innerHTML:", value);
return value;
}
});
})();
修正内容:
- 分别保存
getter
和setter
到不同的变量:originalInnerHTMLGetter
和originalInnerHTMLSetter
。 - 在
get
方法中调用正确的 getter,以便可以获得实际的innerHTML
值。
这样修改后,获取到的值就不会是 undefined 了,应该能够正常返回当前元素的 innerHTML
.
内容由零声教学AI助手提供,问题来源于学员提问