2011-03-20 17 views
9

नहीं कहा गया है, मैंने विंडो इवेंट विंडो में एक ईवेंट लिस्टर जोड़ा और स्थानीय स्टोरेज में किए गए परिवर्तनों का ट्रैक रखना चाहते हैं।लोकल स्टोरेज इवेंट लिस्टनर को

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 

    <script language="JavaScript"><!-- 
     window.addEventListener('storage', storageEventHandler, false); 
     function storageEventHandler(evt){ 
      console.log("oldValue: " + evt.oldValue); 
      console.log("storage event called key: " + evt.key); 
      console.log("newValue: " + evt.newValue); 

     } 
     $(document).ready(function(event) { 
      $('#link1').click(function(event){ 
       event.preventDefault(); 
       localStorage.setItem('page', 2000); 
       console.log(localStorage.getItem('page')); 
      }); 
      $('#link2').click(function(event){ 
       event.preventDefault(); 
       localStorage.setItem('page', 998); 
       console.log(localStorage.getItem('page')); 

      }); 

     }); 
    </script> 
</head> 
</html> 

किसी तरह storageEventHandler जब मैं link1 या link2 क्लिक कभी नहीं कहा जाता है, भले ही localStorage मूल्य बदल जाता है। किसी भी मदद की बहुत सराहना की है।

+2

'स्टोरेज' ईवेंट निकाल दिया गया है या नहीं, ब्राउज़र पर निर्भर करता है। – jAndy

+1

यह सही है, उदाहरण देखें http://code.google.com/p/chromium/issues/detail?id=48159। – pimvdb

उत्तर

18

कुछ ब्राउज़र स्टोरेज ईवेंट का समर्थन नहीं करते हैं, और अधिकांश ब्राउज़र जो इसका समर्थन करते हैं, केवल तभी कॉल करेंगे जब स्टोरेज को एक अलग विंडो द्वारा बदला जाता है। तो, अपने पेज को दो विंडो में खोलें। एक विंडो में लिंक पर क्लिक करें और आप शायद दूसरे में ईवेंट देखेंगे।

धारणा यह है कि आपका पृष्ठ स्थानीय स्टोरेज के साथ अपनी सभी विंडो में पहले से ही सभी इंटरैक्शन को जानता है और जब एक अलग विंडो चीजों को बदलती है तो केवल अधिसूचना की आवश्यकता होती है। यह, ज़ाहिर है, एक मूर्ख धारणा है। लेकिन, स्थानीय स्टोरेज एक नई बात है। उम्मीद है कि वे अंततः इसे सब खत्म कर देंगे।

+6

दुर्भाग्यवश, उपर्युक्त समय "अंततः" अभी तक नहीं आया है :( –

+0

अफसोस की बात है, यह सच है। मुझे उम्मीद है कि अंततः इसे फिर से देखने के लिए समय निकालें। मेरे पास कुछ चीजों के आसपास काम करने के लिए कुछ जंगली हैक विचार हैं। मैं बस ' इन दिनों इस तरह के प्रयोगों के लिए अधिक समय नहीं है। –

+1

http://html5demos.com/storage-events – vsync

8

storage ईवेंट हैंडलर केवल अन्य विंडो को प्रभावित करेगा। जब भी localStorage के अंदर एक विंडो में कुछ बदलता है तो अन्य सभी विंडो इसके बारे में अधिसूचित होती हैं और यदि कोई कार्रवाई करने की आवश्यकता होती है तो इसे storage ईवेंट सुनकर हैंडलर फ़ंक्शन द्वारा हासिल किया जा सकता है।

उसी विंडो के लिए आपको उसी विंडो में एक ही व्यवहार को प्राप्त करने के लिए localStorage.setItem() के बाद storageEventHandler फ़ंक्शन मैन्युअल रूप से कॉल करना होगा।

+0

यही जवाब है। धन्यवाद। – user2422869

संबंधित मुद्दे