ब्राउज़र विंडो / टैब बंद होने पर लोकलस्टोरेज आइटम कैसे हटाएं?


403

मेरा मामला: कुंजी + मान वाला लोकलस्टोरेज जब ब्राउज़र बंद हो और सिंगल टैब न हो तो उसे हटा दिया जाना चाहिए।

कृपया मेरा कोड देखें कि क्या इसका उचित और क्या सुधार हो सकता है:

//create localStorage key + value if not exist
if(localStorage){
   localStorage.myPageDataArr={"name"=>"Dan","lastname"=>"Bonny"}; 
}

//when browser closed - psedocode
$(window).unload(function(){
  localStorage.myPageDataArr=undefined;
});

32
यदि आप ब्राउज़र पर स्थानीय भंडारण को बंद करना चाहते हैं, तो मैं इसका उपयोग करने के आपके कारणों पर सवाल उठाऊंगा।
डनहमजज़

16
आपके पास स्थानीय और सत्र दोनों स्टोरेज ऑब्जेक्ट हो सकते हैं- मैं सत्र मूल्यों के लिए sessionStorage का उपयोग करेगा। Btw, मान को अपरिभाषित करने के लिए इसे हटाता नहीं है, या इसे लोकलस्टोरेज से हटाता है, यह सिर्फ अपरिभाषित के लिए इसका मान निर्धारित करता है।
kennebec

2
@kennebec - undefinedहालांकि पहले से संग्रहीत आइटम को अधिलेखित करने के लिए सेटिंग । लेकिन हाँ, का उपयोग .removeItem()करना अधिक उचित है।
nnnnnn

2
स्थानीयस्टोरेज के बजाय बस सेशनस्टोर का उपयोग करें
अल्बर्टो एक्यूना

2
localStorage.clear(); यदि आप संपूर्ण संग्रहण साफ़ करना चाहते हैं, तो उपयोग करें ।
काला मम्बा

जवाबों:


802

इस तरह किया जाना चाहिए और डिलीट ऑपरेटर के साथ नहीं:

localStorage.removeItem(key);

1
हम वास्तव में डिलीट ऑपरेटर का उपयोग क्यों नहीं कर सकते हैं? मेरे परीक्षणों से, ऐसा लगता है कि delete localStorage.keyजैसे ही ठीक काम करता है localStorage.removeItem(key)। जब मैं अपने वेरिएबल को localStorage.key = 1इसके बजाय सेट करता हूं, तो डिलीट का उपयोग करना मेरे लिए स्पष्ट लगता है localStorage.setItem('key', 1)
ऑस्ट

6
यदि यह काम करता है, तो आप तकनीकी रूप से इसका उपयोग कर सकते हैं। लेकिन हटाने पर विचार करते हुए इसे एक सदस्य फ़ंक्शन के रूप में प्रदान किया जाता है, एक अलग ऑपरेटर का उपयोग करके संभावित अपरिभाषित व्यवहार में चलने के बजाय इसका उपयोग करना तर्कसंगत लगता है।
कुंगफू

@kungphu हमेशा (अकस्मात) ऐसा कर सकते हैं localStorage.removeItem = null;, जो localStorage.removeItem(key);एक संभावित खराब विचार है।
कंकाल

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

3
localStorage.key = 1इस तरह से दुर्घटनाओं को टालने के लिए @skeggse यही कारण है कि पहली जगह में लिखना एक बुरा विचार है
Jivan

114

windowवैश्विक कीवर्ड के साथ प्रयोग करें : -

 window.localStorage.removeItem('keyName');

6
विंडो ऑब्जेक्ट का उपयोग क्यों करें? बस localStorage.removeItem(key)ठीक काम करता है।
परदीप जैन

3
इस लिंक की जाँच stackoverflow.com/questions/5319878/...
विनीत

क्या यह समाधान वास्तव में IE 11 के लिए काम करता है? कृपया सुझाव दे। मुझे कोणीय 5 कोड में यह परेशानी हो रही है।
करण

95

आप beforeunloadजावास्क्रिप्ट में घटना का उपयोग कर सकते हैं ।

वेनिला जावास्क्रिप्ट का उपयोग करके आप कुछ ऐसा कर सकते हैं:

window.onbeforeunload = function() {
  localStorage.removeItem(key);
  return '';
};

वह ब्राउज़र विंडो / टैब बंद होने से पहले कुंजी को हटा देगा और आपको क्लोज विंडो / टैब एक्शन की पुष्टि करने के लिए संकेत देता है। मैं आशा करता हूं कि आपकी समस्या का समाधान होगा।

नोट: onbeforeunloadविधि को एक स्ट्रिंग लौटना चाहिए।


यह वास्तव में उपयोगी था। उत्तर स्वीकार करना अच्छा हो सकता है (इस समय के बाद भी)।
रिचर्ड मॉर्गन

8
@dhsto VanillaJS सादा जावास्क्रिप्ट है :) यहाँ देखें: VanillaJS क्या है?
भारत खत्री

1
एक समस्या यह है कि इसे तब भी कहा जाता है जब आप एक ही पृष्ठ पर नेविगेट करते हैं, न कि केवल टैब बंद होने पर, जो कि अभीष्ट नहीं है। साइड नोट: onbeforeunload से अपरिभाषित लौटने पर अनलोडिंग करते समय दिखाई देने वाला संदेश अक्षम हो जाएगा।
स्टेन बोंडी

यदि उपयोगकर्ता पृष्ठ पर रहना चाहता है और आप पहले से ही स्थानीय संग्रहण को हटाना चाहते हैं तो क्या खुशी होगी? इसके अलावा समाधान Chrome और IE11
oracleruiz

सत्रांक का उपयोग क्यों नहीं किया जाता है?
सचिन प्रसाद

94

यदि आप ब्राउज़र बंद होने पर कुंजी को हटाना चाहते हैं तो आपको इसके बजाय सेशनस्टोर का उपयोग करना चाहिए।


3
यह सबसे अच्छा जवाब है; sessionStorageवह उपाय है जो पूछने वाले का वर्णन है।
बेनी

8
+1 का उल्लेख करने के लिए sessionStorage, लेकिन डब्ल्यू 3 सी एडिटर के ड्राफ्ट में कहा गया है: 'एक ब्राउज़िंग संदर्भ का जीवनकाल वास्तविक उपयोगकर्ता एजेंट प्रक्रिया के जीवनकाल से असंबंधित हो सकता है, क्योंकि उपयोगकर्ता एजेंट पुनरारंभ होने के बाद सत्र फिर से शुरू करने का समर्थन कर सकता है।'
तमसेन

28
'SessionStorage' के साथ समस्या यह है कि जब आप एक नया टैब खोलते हैं तो यह संग्रहीत नहीं होता है, उदाहरण के लिए ctrl के साथ एक लिंक पर क्लिक करें। मुझे एक लोकलस्टोरेज / सेशनस्टोरेज हाईब्रिड लोल की जरूरत है।
एडविन स्टेलर

3
@EdwinStoteler मुझे भी। मैं थोड़े उलझन में हूँ कि वे क्या सोच रहे थे जब उन्होंने इसे इस तरह डिजाइन किया। मुझे वास्तव में एक इन-मेमोरी केवल ब्राउज़र स्टोरेज तक पहुंच की आवश्यकता है जो ब्राउज़र बंद होने पर नष्ट हो जाती है। मैं संवेदनशील जानकारी को पूरे डोमेन पर एक्सेस करना चाहता हूं, लेकिन मैं उस जानकारी को किसी हार्ड डिस्क पर हिट नहीं करना चाहता।
बीटी

19

प्रयोग करके देखें

$(window).unload(function(){
  localStorage.clear();
});

उम्मीद है इससे आपका काम बनेगा


2
क्या आप पूरा स्थानीयकरण साफ़ करना चाहते हैं? यदि ऐसा है तो उपयोग करेंlocalStorage.clear();
राफेल मार्केज़

यह स्पष्ट था कि मैं प्रश्न में क्या चाहता हूँ - कुंजी केवल हटा + मूल्य
Yosef

12
यह पूरे स्थानीय क्षेत्र को साफ कर देगा। बुरा समाधान!
एमी

12

एक बहुत ही विशिष्ट उपयोग का मामला है, जिसमें लोकलस्टोरेज के बजाय सेशनस्टोरेज का उपयोग करने का कोई भी सुझाव वास्तव में मदद नहीं करता है। कम-से-कम एक टैब खुलने के बाद कुछ-कुछ संग्रहित होने के कारण उपयोग-मामला कुछ सरल होगा, लेकिन यदि आप शेष अंतिम टैब को बंद करते हैं, तो इसे अमान्य कर दें। यदि आपको क्रॉस-टैब और विंडो को सहेजने के लिए आपके मूल्यों की आवश्यकता है, तो सत्रस्टेज आपको तब तक मदद नहीं करता है जब तक आप श्रोताओं के साथ अपने जीवन को जटिल नहीं करते हैं, जैसे मैंने कोशिश की है। इस बीच में लोकलस्टोरेज इसके लिए एकदम सही होगा, लेकिन यह काम 'बहुत अच्छी तरह से' करता है, क्योंकि ब्राउजर के रीस्टार्ट होने के बाद भी आपका डेटा वहां इंतजार कर रहा होगा। मैंने एक कस्टम कोड और लॉजिक का उपयोग किया जो दोनों का फायदा उठाता है।

मैं बल्कि समझाता हूँ तो कोड दे। पहले स्टोर करें कि आपको लोकलस्टोरेज में क्या चाहिए, फिर लोकलस्टोरेज में भी एक काउंटर बनाएं जिसमें आपके द्वारा खोले गए टैब की संख्या होगी। हर बार पेज लोड होने और हर बार पेज अनलोड होने के बाद घट जाएगा। उपयोग करने के लिए आप यहां अपनी पिक ले सकते हैं, मैं 'लोड' और 'अनलोड' करने का सुझाव दूंगा। जब आप अनलोड करते हैं, तो आपको उन क्लीनअप कार्यों को करने की आवश्यकता होती है, जिन्हें आप काउंटर 0 पर पहुंचने पर करना चाहते हैं, जिसका अर्थ है कि आप अंतिम टैब को बंद कर रहे हैं। यहाँ मुश्किल हिस्सा आता है: मुझे पेज के अंदर पेज रीलोड या नेविगेशन और टैब को बंद करने के बीच का अंतर बताने के लिए एक विश्वसनीय और सामान्य तरीका नहीं मिला है। इसलिए यदि आपके द्वारा संग्रहित डेटा कुछ ऐसा नहीं है जिसे आप चेक करने के बाद लोड पर पुनर्निर्माण कर सकते हैं तो यह आपका पहला टैब है, फिर आप इसे हर रिफ्रेश पर नहीं निकाल सकते। इसके बजाय आपको टैब काउंटर बढ़ाने से पहले प्रत्येक लोड पर सेशनस्टोर में एक ध्वज को संग्रहीत करने की आवश्यकता होती है। इस मान को संग्रहीत करने से पहले, आप यह देखने के लिए जांच कर सकते हैं कि क्या इसका पहले से ही एक मूल्य है और यदि यह नहीं है, तो इसका मतलब है कि आप पहली बार इस सत्र में लोड कर रहे हैं, जिसका अर्थ है कि आप लोड होने पर सफाई कर सकते हैं मान सेट नहीं है और काउंटर 0 है।


के जवाब के रूप में "क्यों नहीं इस्तेमाल किया sessionStorage?" दृष्टिकोण, w3schools.com/html/html5_webstorage.asp से भी : "window.sessionStorage - एक सत्र के लिए डेटा संग्रहीत करता है (टैब बंद होने पर डेटा खो जाता है")। तो इसका जवाब बस इतना ही है। यदि आप हमारे द्वारा बताए गए usecase में भी लगातार कुछ चाहते हैं, तो sessionStorage बेकार है।
सोलथुन

3
मुझे लगता है कि इसके लिए सबसे अच्छा कार्यान्वयन एक ब्राउज़रवॉकर सेवा होगी जो मूल रूप से उन घटनाओं को आग लगाती है जो अन्य घटक सुन सकते हैं (यानी ब्राउज़र-ओपन, ब्राउज़र-क्लोज़, ब्रॉसर-लोड, ब्राउज़र-अनलोड आदि) और इसके अंदर इन सभी कार्यान्वयन विवरणों को छिपाएं। प्रत्येक घटक यह तय कर सकता है कि उसे अपना काम करने के लिए किन घटनाओं को संभालने की आवश्यकता है। मेरा एकमात्र प्रश्न यह होगा कि यदि मशीन या किसी चीज़ में बिजली कट जाती है, तो ये गुण अगली बार ब्राउज़र में खोले जाने पर अगली बार लोकलस्टोरेज में रहेंगे। ?
pQuestions123

11

सेशनस्टोरेज का उपयोग करें

सेशनस्टोरेज ऑब्जेक्ट लोकलस्टोरेज ऑब्जेक्ट के बराबर है, सिवाय इसके कि यह केवल एक सेशन के लिए डेटा स्टोर करता है। जब उपयोगकर्ता ब्राउज़र विंडो बंद करता है, तो डेटा हटा दिया जाता है।

वर्तमान सत्र में उपयोगकर्ता ने एक बटन पर क्लिक करने की संख्या को निम्न उदाहरण में गिना है:

उदाहरण

if (sessionStorage.clickcount) {
    sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
    sessionStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "You have clicked the button " +
sessionStorage.clickcount + " time(s) in this session.";

1
ब्राउजर टैब क्लोज करने पर डेटा डिलीट हो जाता है।
कोसमोनाफ्ट


5
localStorage.removeItem(key);  //item

localStorage.clear(); //all items

1
एक पुराने प्रश्न का उत्तर देते समय, आपका उत्तर अन्य StackOverflow उपयोगकर्ताओं के लिए अधिक उपयोगी होगा यदि आपने यह समझाने के लिए कुछ संदर्भ शामिल किए कि आपका उत्तर कैसे मदद करता है, विशेष रूप से उस प्रश्न के लिए जो पहले से ही स्वीकृत उत्तर है। देखें: कैसे मैं एक अच्छा जवाब लिख सकता हूं
तंज

मेरे लिए पर्याप्त स्पष्ट दिखता है
जियोर्जियो टेंपेस्टा

4

हालांकि, कुछ उपयोगकर्ताओं ने पहले ही इस सवाल का जवाब दिया, मैं इस समस्या को हल करने के लिए एप्लिकेशन सेटिंग्स का एक उदाहरण दे रहा हूं।

मेरी भी यही समस्या थी। मैं अपने कोणीय अनुप्रयोग में https://github.com/grevory/angular-local-storage मॉड्यूल का उपयोग कर रहा हूं । यदि आप अपने ऐप को निम्नानुसार कॉन्फ़िगर करते हैं, तो यह स्थानीय भंडारण के बजाय सत्र भंडारण में चर को बचाएगा। इसलिए, यदि आप ब्राउज़र को बंद करते हैं या टैब बंद करते हैं, तो सत्र भंडारण स्वचालित रूप से हटा दिया जाएगा। आपको कुछ भी करने की आवश्यकता नहीं है।

app.config(function (localStorageServiceProvider) {
  localStorageServiceProvider
  .setPrefix('myApp')
  .setStorageType('sessionStorage')
});

आशा है कि यह मदद करेगा।


4

चुनने के लिए पाँच विधियाँ हैं:

  • setItem (): स्थानीयस्टोरेज में कुंजी और मान जोड़ें
  • getItem (): लोकलस्टोरेज से कुंजी द्वारा एक मान प्राप्त करें
  • removeItem (): स्थानीयस्टोरेज से कुंजी द्वारा एक आइटम निकालें
  • clear (): सभी localStorage साफ़ करें
  • कुंजी (): किसी लोकलस्टोरेज की नौवीं कुंजी प्राप्त करने के लिए एक नंबर दिया गया

आप स्पष्ट (), इस विधि का उपयोग कर सकते हैं जब आह्वान उस डोमेन के लिए सभी अभिलेखों के संपूर्ण संग्रहण को साफ करता है। यह कोई पैरामीटर प्राप्त नहीं करता है।

window.localStorage.clear();

3

यहां यह देखने के लिए एक सरल परीक्षण है कि क्या आपके पास स्थानीय भंडारण के साथ काम करते समय ब्राउज़र का समर्थन है:

if(typeof(Storage)!=="undefined") {
  console.log("localStorage and sessionStorage support!");
  console.log("About to save:");
  console.log(localStorage);
  localStorage["somekey"] = 'hello';
  console.log("Key saved:");
  console.log(localStorage);
  localStorage.removeItem("somekey");  //<--- key deleted here
  console.log("key deleted:");
  console.log(localStorage);
  console.log("DONE ===");
} else {
  console.log("Sorry! No web storage support..");
}

इसने मेरे लिए उम्मीद के मुताबिक काम किया (मैं Google Chrome का उपयोग करता हूं)। : से अनुकूलित http://www.w3schools.com/html/html5_webstorage.asp


3

मुझे नहीं लगता कि यहां प्रस्तुत समाधान 100% सही है क्योंकि window.onbeforeunload घटना को न केवल ब्राउज़र / टैब बंद होने पर (WHICH IS REQUIRED) कहा जाता है, बल्कि अन्य सभी घटनाओं पर भी कहा जाता है। (जो आवश्यक नहीं है)

उन घटनाओं की सूची के बारे में अधिक जानकारी के लिए यह लिंक देखें जो खिड़की को आग लगा सकती हैं।

http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx


आप सही हो सकते हैं, लेकिन फिर भी आपने जो पोस्ट किया है वह एक टिप्पणी है, उत्तर नहीं।
nnnnnn

3

सत्रस्टेज का उपयोग क्यों नहीं किया गया?

"सेशनस्टोरेज ऑब्जेक्ट लोकलस्टोरेज ऑब्जेक्ट के बराबर है, सिवाय इसके कि यह डेटा को केवल एक सेशन के लिए स्टोर करता है। जब यूजर ब्राउजर विंडो को बंद करता है तो डेटा डिलीट हो जाता है।"

http://www.w3schools.com/html/html5_webstorage.asp


3

इस प्रश्न को देखने के 6 साल बाद, यह पूछे जाने पर, मैंने पाया कि अभी भी इस प्रश्न का कोई पर्याप्त उत्तर नहीं है; जो निम्नलिखित में से सभी को प्राप्त करना चाहिए:

  • ब्राउज़र बंद करने के बाद स्थानीय संग्रहण साफ़ करें (या डोमेन के सभी टैब)
  • यदि टैब कम से कम एक टैब सक्रिय रहता है, तो स्थानीय संग्रहण को संरक्षित रखें
  • एकल टैब को पुनः लोड करते समय स्थानीय संग्रहण को संरक्षित करें

उपरोक्त प्राप्त करने के लिए प्रत्येक पृष्ठ लोड की शुरुआत में जावास्क्रिप्ट के इस टुकड़े को निष्पादित करें:

((nm,tm) => {
    const
            l = localStorage,
            s = sessionStorage,
            tabid = s.getItem(tm) || (newid => s.setItem(tm, newid) || newid)((Math.random() * 1e8).toFixed()),
            update = set => {
                let cur = JSON.parse(l.getItem(nm) || '{}');
                if (set && typeof cur[tabid] == 'undefined' && !Object.values(cur).reduce((a, b) => a + b, 0)) {
                    l.clear();
                    cur = {};
                }
                cur[tabid] = set;
                l.setItem(nm, JSON.stringify(cur));
            };
    update(1);
    window.onbeforeunload = () => update(0);
})('tabs','tabid');

संपादित करें: यहां मूल विचार निम्नलिखित है:

  1. खरोंच से शुरू होने पर, सत्र भंडारण को एक कुंजी में एक यादृच्छिक आईडी निर्दिष्ट किया जाता है tabid
  2. स्थानीय भंडारण को तब एक कुंजी के साथ सेट किया जाता है जिसे tabsएक ऑब्जेक्ट कहा जाता है जिसे कुंजी tabid1 पर सेट किया जाता है।
  3. जब टैब अनलोड किया जाता है, तो स्थानीय स्टोरेज को 0 पर सेट tabsऑब्जेक्ट से अपडेट किया जाता है tabid
  4. यदि टैब फिर से लोड किया गया है, तो यह पहले अनलोड किया गया है, और फिर से शुरू किया गया है। चूंकि सत्र संग्रहण की कुंजी tabidमौजूद है, और इसलिए स्थानीय संग्रहण की tabsउप-कुंजी के साथ स्थानीय संग्रहण कुंजी tabidसाफ़ नहीं की जाती है।
  5. जब ब्राउज़र अनलोड किया जाता है, तो सभी सत्र भंडारण को साफ़ कर दिया जाएगा। सत्र को फिर से शुरू करने पर स्टोरेज tabidअब मौजूद नहीं होगा और एक नया tabidजेनरेट होगा। चूंकि स्थानीय भंडारण में इसके लिए उप-कुंजी नहीं है tabid, न ही कोई अन्य tabid(सभी सत्र बंद थे), यह साफ हो गया है।
  6. नए बनाए गए टैब पर, tabidसत्र भंडारण में एक नया उत्पन्न होता है, लेकिन चूंकि कम से कम एक tabs[ tabid] मौजूद है, स्थानीय भंडारण साफ़ नहीं होता है

1
यदि ब्राउज़र क्रैश होता है, तो window.onbeforeunloadउसे कॉल नहीं किया जाएगा, और स्थानीय tabs[tabid]को 0 => पर सेट नहीं किया जाएगा। स्थानीय स्टोरेज अब कभी भी क्लियर नहीं होगा। मुझे लगता है कि उस मामले में एक वॉचडॉग अधिक उपयुक्त होगा, टैब लोडिंग पर 1 लिखने के बजाय, आपको वर्तमान टाइमस्टैम्प लिखना चाहिए। फिर कम हिस्से में, आपको देरी का जोर देना चाहिए क्योंकि टाइमस्टैम्प बहुत बड़ा नहीं है या यदि ऐसा है तो 0 से बदल दें। इस तरह, आप वास्तविक कॉल पर निर्भर नहीं होते हैं onbeforeunload। टैब को स्थानीय संग्रहण अस्तित्व बनाए रखने के लिए समय-समय पर वॉचडॉग को रीसेट करने की आवश्यकता होती है।
xryl669

1

यह एक पुराना प्रश्न है, लेकिन ऐसा लगता है कि ऊपर दिए गए उत्तर में से कोई भी सही नहीं है।

मामले में आप प्रमाणीकरण या किसी भी संवेदनशील जानकारी को संग्रहीत करना चाहते हैं जो केवल ब्राउज़र बंद होने पर नष्ट हो जाती हैं, आप क्रॉस-टैब संदेश पास करने पर sessionStorageऔर उसके localStorageलिए भरोसा कर सकते हैं ।

असल में, यह विचार है:

  1. आप बिना किसी पिछले टैब से बूटस्ट्रैप खोले हुए हैं, इस प्रकार आपके दोनों localStorageऔर sessionStorageखाली हैं (यदि नहीं, तो आप खाली कर सकते हैं localStorage)। आपको एक संदेश ईवेंट श्रोता को पंजीकृत करना होगा localStorage
  2. उपयोगकर्ता इस टैब (या आपके डोमेन पर खोले गए किसी अन्य टैब) पर एक संवेदनशील जानकारी प्रमाणित / बनाता है।
  3. आप sessionStorageसंवेदनशील जानकारी को संग्रहीत करने के लिए अपडेट करते हैं, और localStorageइस जानकारी को संग्रहीत करने के लिए उपयोग करते हैं, फिर इसे हटा दें (आप यहां समय के बारे में परवाह नहीं करते हैं, क्योंकि घटना को कतार में रखा गया था जब डेटा बदल गया था)। उस समय खोले गए किसी अन्य टैब को संदेश घटना पर वापस बुलाया जाएगा, और sessionStorageसंवेदनशील जानकारी के साथ उन्हें अपडेट करेगा ।
  4. यदि उपयोगकर्ता आपके डोमेन पर एक नया टैब खोलता है, sessionStorageतो यह खाली हो जाएगा। कोड को localStorage(उदाहरण के लिए:) में एक कुंजी सेट करनी होगी req। किसी भी (सभी) अन्य टैब को संदेश ईवेंट में वापस बुलाया जाएगा, उस कुंजी को देखें, और उनके sessionStorage(जैसे 3) से संवेदनशील जानकारी के साथ उत्तर दे सकते हैं , यदि उनके पास ऐसा है।

कृपया ध्यान दें कि यह योजना उस window.onbeforeunloadघटना पर निर्भर नहीं करती है जो नाजुक है (चूंकि ब्राउज़र को बंद किया जा सकता है / बिना इन घटनाओं को निकाल दिया जा सकता है)। साथ ही, संवेदनशील जानकारी को संग्रहीत करने localStorageका समय बहुत छोटा है (चूंकि आप क्रॉस टैब संदेश घटना के लिए ट्रांसकेंट्स परिवर्तन का पता लगाने पर भरोसा करते हैं) इसलिए यह संभव नहीं है कि उपयोगकर्ता की हार्ड ड्राइव पर ऐसी संवेदनशील जानकारी लीक हो।

यहाँ इस अवधारणा का एक डेमो है: http://jsfiddle.net/oypdwxz7/2/


Xryl669 को संपादित करने के लिए धन्यवाद, आपने एक अच्छा बिंदु बनाया। जब मैं अब इस बारे में सोच रहा हूं, तो क्या एक साझा वेब कार्यकर्ता का उपयोग करना सबसे अच्छा होगा? developer.mozilla.org/en-US/docs/Web/API/SaredWorker मामले में वर्तमान ब्राउज़र समर्थन कोई समस्या नहीं है
Hacktisch

हां, आप या तो SharedWorker या एक ब्रॉडकास्टनेल (या इस तरह का लोकलस्टोरेज) का उपयोग कर सकते हैं, हालाँकि एज में पहले दो उपलब्ध नहीं हैं। मूल रूप से, कोई भी विधि जो क्रॉस टैब, क्रॉस विंडो है, काम करेगी। कठिनाई हर एक को मिल रही है जो हर जगह कम से कम परेशानी के साथ काम करती है।
xryl669

1

ब्राउज़र को बंद करने का पता लगाने का ऐसा कोई तरीका नहीं है, इसलिए शायद आप ब्राउज़र बंद होने पर लोकलस्टोरेज को डिलीट नहीं कर सकते हैं, लेकिन सेशनकुकि का उपयोग करने वाली चीजों को संभालने का एक और तरीका है क्योंकि यह ब्राउजर के बंद होने के बाद नष्ट हो जाएगा।


0

आप बस sessionStorage का उपयोग कर सकते हैं। क्योंकि sessionStorage ब्राउज़र विंडो बंद हो जाएगा जब सभी महत्वपूर्ण मूल्य को साफ करने की अनुमति देते हैं।

वहां देखें: SessionStorage- MDN


-5

आप स्थानीय संग्रहण को हटाने के लिए निम्नलिखित कोड का प्रयास कर सकते हैं:

delete localStorage.myPageDataArr;

29
यह लोकलस्टोरेज कुंजी को हटाने का सही तरीका नहीं है। आपको localStorage.removeItem(key);एक कुंजी को हटाने के लिए उपयोग करना चाहिए ।
एमटी।

1
का उपयोग करना चाहिए localStorage.removeItem (कुंजी); डिलीट कीवर्ड नहीं।
रोब इवांस

@MT। क्यों नहीं उपयोग कर रहे हैं delete? मैंने कोशिश की, और यह काम करता है। क्या कोई साइड इफेक्ट या कुछ भी है जिसे हमें डिलीट का उपयोग नहीं करना चाहिए? धन्यवाद।
user1995781

2
@ user1995781 का उपयोग deleteकरना सबसे अच्छा अभ्यास नहीं हैlocalStorage
justmyfreak

1
@justmyfreak यह एक जवाब नहीं है
अलविटावा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.