Chrome不会看到通过Object.defineProperty添加getter和setter来重新定义属性

Chrome does not see attributes redefined with getter and setter added with Object.defineProperty

本文关键字:新定义 setter 属性 定义 getter 添加 defineProperty Object Chrome      更新时间:2023-09-26

我需要重新定义Getter和Setter在一个网页的元素(我们说一个"iframe"),为"src"属性。下面是代码:

this._targets = {
        "document.createElement": {
            capture: true,
            funcName: "createElement", 
            obj: document, 
            origPtr: document.createElement
        }
 };
_MycreateElement = function() {
var target = this._targets["document.createElement"];
var elem = target.origPtr.apply(target.obj, arguments);
if(arguments[0] == "iframe"){
    Object.defineProperty(elem, "src", {
        get: function() {
            var _src = src;
            console.log(_src);
            return _src;
        },
        set: function(value){
            _src = value;
        }
    });
}
return elem;
}

_MycreateElement是普通"createElement"的重载函数,重载工作正常。问题是,Chrome似乎创造了一个"影子src",并与自己的工作。(我可以读取和写入我的_src变量,但Chrome不使用它。)

我发现它可以添加this.getAttribute('src')this.setAttribute("src", value),但这不是我需要的。

有人有什么想法吗?

我想"解绑定"重载函数,获取/设置值并"重新绑定"它。你认为这可能吗?如何(暂时)恢复正常的getter/setter?

我发现解决我的问题的唯一方法是使用setAttributegetAttribute。我真的认为这是唯一的办法!为了完全达到我的问题的目标(即"密切关注"元素的src属性如何变化),我需要为每个元素重新定义setAttributegetAttribute函数。