यहाँ पर अधिक जानकारी IE6/7/8 के लिए workaround है। मैंने परीक्षण किया और यह बहुत अच्छी तरह से काम करता है!
अद्यतन: लिंक टूट गया है, तो आप यहाँ मेरे परीक्षण से की कोड देख सकते हैं:
// Super amazing, cross browser property function, based on http://thewikies.com/
function addProperty(obj, name, onGet, onSet) {
// wrapper functions
var
oldValue = obj[name],
getFn = function() {
return onGet.apply(obj, [oldValue]);
},
setFn = function (newValue) {
return oldValue = onSet.apply(obj, [newValue]);
};
// Modern browsers, IE9+, and IE8 (must be a DOM object),
if (Object.defineProperty) {
Object.defineProperty(obj, name, {
get: getFn,
set: setFn
});
// Older Mozilla
} else if (obj.__defineGetter__) {
obj.__defineGetter__(name, getFn);
obj.__defineSetter__(name, setFn);
// IE6-7
// must be a real DOM object (to have attachEvent) and must be attached to document (for onpropertychange to fire)
} else {
var onPropertyChange = function (e) {
if (event.propertyName == name) {
// temporarily remove the event so it doesn't fire again and create a loop
obj.detachEvent("onpropertychange", onPropertyChange);
// get the changed value, run it through the set function
var newValue = setFn(obj[name]);
// restore the get function
obj[name] = getFn;
obj[name].toString = getFn;
// restore the event
obj.attachEvent("onpropertychange", onPropertyChange);
}
};
obj[name] = getFn;
obj[name].toString = getFn;
obj.attachEvent("onpropertychange", onPropertyChange);
}
}
स्रोत
2012-06-27 03:01:00
बनाता है मुझसे पूछते क्यों माइक्रोसॉफ्ट से नफरत करता है * JavaScript डेवलपर। (नफरत, एक शब्द जिसे टूटा कार्यान्वयन जारी/रिटायर करने की अनिच्छा का वर्णन करने के लिए प्रयोग किया जाता है)। – Sukima
यही कारण है कि उन्होंने सिल्वरलाइट बनाया: उनके द्वारा बनाई गई जावास्क्रिप्ट की शुद्ध दुःखद नफरत से। –