2013-05-08 80 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