Chrome没有看到使用Object.defineProperty添加的getter和setter重新定义的属性

时间:2014-05-12 19:18:02

标签: javascript google-chrome-extension getter-setter

我需要在网页元素上重新定义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似乎创建了像一个" shadow src"并与他自己合作。 (我可以读写我的_src变量,但Chrome不会使用它。)

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

有没有人有想法?

我在考虑"解开"过载功能,获取/设置值和"重新绑定"它。你觉得有可能吗? 如何恢复(临时)正常的getter / setter?

1 个答案:

答案 0 :(得分:0)

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