2011-05-06 19 views
10

ब्राउजर पर पेज लाइफ के माध्यम से कुकी को मॉनिटर करने के लिए सबसे अच्छा जेएस या JQuery- विशिष्ट दृष्टिकोण क्या है और कुकी चालू होने पर एक ईवेंट ट्रिगर करें?Jquery कुकी मॉनीटर

उत्तर

14

जहां तक ​​मुझे पता है, change (या समान) ईवेंट को सीधे कुकी पर बांधना संभव नहीं है। इसके बजाए, मैं इस दृष्टिकोण के लिए जाऊंगा:

एक ऐसे परागक बनाएं जो प्रत्येक एक्स मिलीसेकंड के पहले ज्ञात मान से कुकी मान की तुलना करता है।

// basic functions from the excellent http://www.quirksmode.org/js/cookies.html 
function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

///////////////////////////////// 
// ACTUAL FUN STUFF BELOW 
///////////////////////////////// 

var cookieRegistry = []; 

function listenCookieChange(cookieName, callback) { 
    setInterval(function() { 
     if (cookieRegistry[cookieName]) { 
      if (readCookie(cookieName) != cookieRegistry[cookieName]) { 
       // update registry so we dont get triggered again 
       cookieRegistry[cookieName] = readCookie(cookieName); 
       return callback(); 
      } 
     } else { 
      cookieRegistry[cookieName] = readCookie(cookieName); 
     } 
    }, 100); 
} 

प्रयोग तो कुछ इस तरह होगा:

listenCookieChange('foo', function() { 
    alert('cookie foo has changed!'); 
}); 

नोट: इस परीक्षण नहीं किया गया है और बस कैसे मैं इस समस्या के दृष्टिकोण होगा की एक त्वरित प्रदर्शन है।

संपादित करें: मैंने अभी इसका परीक्षण किया है और यह काम करता है।See example :)

+1

नोट: यह केवल कुकी परिवर्तन घटनाओं पर ट्रिगर किया गया है। मुझे ** कुकी सृजन ** की जांच करने की आवश्यकता है और इस प्रकार इस तरह के कोड को संशोधित किया गया है: '... अगर (कुकी रजिस्ट्री [कुकी नाम] || readCookie (cookieName)! = Null) {... ' –

+0

हाय अरोन, इस ठीक के लिए धन्यवाद! वास्तव में धन्यवाद। यह 2017 है और मुझे 'listenCookieChange() 'के लिए' लगातार-वापसी 'के बारे में एस्लिंट नियम के साथ एक समस्या का सामना करना पड़ रहा है, जहां' setInterval' है। क्या आप एस्लिंट को खुश करने के लिए अपना उत्तर अपडेट कर सकते हैं? एस्लिंट कार्यों को अक्षम करना। – Sylar

-1

cookies के लिए jQuery प्लगइन है।

http://plugins.jquery.com/project/Cookie

यह एक HTML दस्तावेज़ में कुकीज़ का उपयोग करने की मुश्किल नहीं है, वे document.cookie में रहते हैं।

<!-- Add cookie --> 
$.cookie('cookieName':'cookieValue'); 

<!-- get cookie --> 
$.cookie('cookieName'); 

<!-- removecookie --> 
$.cookie('cookieName', null); 

इसके अतिरिक्त कुकी जोड़ने के लिए विकल्प तर्क हैं, उदा। समाप्ति।

हालांकि आपके प्रश्न के उत्तर में, मुझे वास्तव में नहीं लगता कि आप दुर्भाग्यवश कुकीज़ पर ईवेंट श्रोता लागू कर सकते हैं।

+1

आपके कोड में खराब वाक्यविन्यास है। आप जावास्क्रिप्ट में एचटीएमएल टिप्पणियों का उपयोग कर रहे हैं और पहले उदाहरण में 'कुकी नाम' और 'कुकी वाल्यू' के बीच कोलन को अल्पविराम की आवश्यकता है। यह डाउनवोट का कारण हो सकता है। – benekastah

1

पता है कि इससे कुछ अजीब चीज़ों में मदद मिली। मैं एक मोबाइल वेबपैप पर Google अनुवाद (http://translate.google.com/translate_tools?hl=hi) का उपयोग करने की कोशिश कर रहा था और हर बार भाषा बदल जाती है, यह दस्तावेज़ के पहले बच्चे के रूप में शीर्ष पर एक बार डालने लगा। तन । अब मैं 'googtrans' कुकी को ट्रैक कर रहा हूं और यह

listenCookieChange('googtrans', function() { 
    $(document.body).css('top','0px'); 
}); 
संबंधित मुद्दे