2013-05-08 81 views
0

我想跟踪在HTMLImageElement尚未附加到文档时对src属性所做的更改。我的目标是修改图像URL以强制使用插入的脚本使用某个代理服务器。使用Image对象主要用于预加载的脚本是外部(第三方)脚本,所以我不能只搜索&来代替instance.src = value的任何其他发生。我可以控制脚本所嵌入的文档,但无法控制脚本本身。HTMLImageElement:跟踪'src'属性在尚未连接时的更改

我已经尝试过给该图像元素

Object.defineProperty(
    Image.prototype, 
    "src", 
    { get : function(){...}, set : function(val){...}} 
); 

上定义的getter/setter但这似乎并未有任何影响的。当创建一个新的图像就像

var img = new Image(); 
img.src = "foo.png"; 
alert(img.src); 

既没有调用者也没有调用getter。

你知道还有什么我可以试图得到通知,当src属性被修改而不修改原来的属性设置源?

在此先感谢!

+0

首先,我不会乱用内置的原型。其次,'src'是Image对象的一个​​属性,因此它是在构造函数中创建的。因此,不是试图覆盖src,而是将你的方法添加到原型,并使它们与'this.src'交互。 – 2013-05-08 12:31:47

回答

1

我用你的示例代码重新测试了我以前的答案 - 没有骰子。因此,我将与安德烈的建议而不是去 - 不这样做:不是P,通过更多的“传统”连接到原型方法,工作手段:

Image.prototype.setSrc = function(src) { 
    // your code affecting this.src 
    // from what I can tell in your use-case, you only need this setter 
}; 

Image.prototype.getImage = function() { 
    // but, in case you want to do anything before getting the image 
    // you can call this method 
}; 

var img = new Image(); 
img.setSrc("foo.png"); 

// snip 

document.body.appendChild(img.getImage()); 
+0

对不起,但似乎我的问题含糊不清。由于它应该作为一般解决方案工作,并使用第三方代码,因此我无法修改原始源代码,因此无法引入其他属性。 – muffel 2013-05-08 17:09:12

+0

这是...奇怪。你不能扩展第三方代码来做你所需要的吗?似乎试图修改JS的核心部分是'糟糕的想法' - 特别是考虑到这样的解决方案可能不被所有浏览器支持或以相同的方式支持。我会非常小心并谨慎对待您的预期路线,我会强烈建议您重新评估您的路线,看看您是否找不到扩展第三方代码的方法。 – phatskat 2013-05-08 17:47:12