माइक्रोसॉफ्ट इस मुद्दे से अवगत हो रहा है, लेकिन यह नहीं लगता है जैसे वे किसी भी समय इसे जल्द ही ठीक करने के लिए जा रहे हैं: https://connect.microsoft.com/IE/feedback/details/774798/localstorage-event-fired-in-source-window
एक विकल्प है कि आप अपने श्रोताओं और setters डिजाइन कर सकते हैं इतना है कि वे जब वे किसी ऐसे संग्रहण ईवेंट से जानकारी प्राप्त करते हैं जो पहले से ही उनके राज्य के अनुरूप है, तो प्रतिक्रिया न करें या स्टोर न करें। हालांकि, यह डिज़ाइन पैटर्न केवल अन्य विंडो पर फायरिंग स्टोरेज ईवेंट पर निर्भर होने से अधिक कठिन हो सकता है।
एक और विकल्प स्थानीय भंडारण को आईई में समान तरीके से काम करना है जो यह अन्य ब्राउज़रों में काम करता है। मैं एक स्वीकार्य रूप से हैकी लेकिन कार्यात्मक समाधान के साथ आया जिसकी मैंने आईई 10 में परीक्षण किया और आईई 8 और आईई 9 में काम करने की उम्मीद की। मेरे जावास्क्रिप्ट घटक विंडो "स्टोरेज" ईवेंट को सीधे नहीं सुनते हैं बल्कि इसके बजाय बनाए गए 'ईवेंट प्रेषक' को सुनते हैं। इवेंट डिस्पैचर विंडो "स्टोरेज" ईवेंट को सुनता है और उस विंडो में उत्पन्न स्टोरेज इवेंट को अनलॉक करता है और रीढ़ की हड्डी की घटना को ट्रिगर करता है। जिस तरह से मैं इस विंडो यह मान संग्रहीत setItem() कि मूल्य के लिए एक अद्वितीय ID बनाता है और इस तरह यह का ट्रैक रखता है, फोन करने के लिए एक कस्टम विधि का उपयोग कर रही है तो:
eventDispatcher.set = function(key, value) {
var storageId = (new Date()).getTime();
eventDispatcher.idList.push(storageId);
localStorage.setItem(key, {value: value, id: storageId});
}
और मेरे eventDispatcher को सुनता है भंडारण की घटनाओं और एक घटना से चलाता है केवल यदि आईडी यह बनाई गई इस मूल्य की आईडी शामिल नहीं है, इस तरह की अपनी सूची:
$(window).on('storage', dispatchStorageEvent);
function dispatchStorageEvent(event) {
var newValue = JSON.parse(event.originalEvent.newValue);
if (eventDispatcher.idList.indexOf(newValue['id']) > -1) {
return;
}
eventDispatcher.trigger("storageEvent:" + event.originalEvent.key, newValue['value']);
}
वहाँ थोड़ा अधिक कोड आप idList कम रखने के लिए और के रूप में बनाना जोड़ सकते हैं पहली जगह में एक खाली सरणी, लेकिन मैंने स्पष्टता के लिए इसे छोड़ दिया। स्टोरेज इवेंट्स को संभालने के लिए इवेंट डिस्पैचर बनाना थोड़ा ओवरहेड है, लेकिन यह आपके विकास को ब्राउज़र के बीच सुसंगत बना सकता है। एक कम हैकी समाधान उचित लॉकिंग और क्यूइंग तंत्र का उपयोग करेगा, लेकिन यह बहुत मुश्किल हो सकता है।
क्या आपके पास कोई भी मौका है कि आपका ग्राहक ईवेंट प्रेषक कैसा दिखता है? – Jesse
जेसी, देखें कि इसे कैसे हल किया गया था https://github.com/Shadez/ls-notifier/blob/master/js/notifier.js – Denis
इस उत्तर में महत्वपूर्ण जानकारी गुम है। – Cerbrus