এটি জিজ্ঞাসা করার 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');
সম্পাদনা করুন: এখানে মূল ধারণাটি নিম্নলিখিত:
- স্ক্র্যাচ থেকে শুরু করার সময়, সেশন স্টোরেজটিকে একটি কীতে একটি এলোমেলো আইডি বরাদ্দ করা হয়
tabid
- লোকাল স্টোরেজটি এমন কী দিয়ে সেট করা হয় যা বলা হয় এমন একটি কী যার সাহায্যে
tabsএই কীটি tabid1 তে সেট করা থাকে a
- যখন ট্যাবটি লোড করা হয়, স্থানীয় স্টোরেজ 0 তে সেট থাকা
tabsকোনও অবজেক্টে আপডেট হয় tabid।
- যদি ট্যাবটি পুনরায় লোড করা হয় তবে এটি প্রথমে আনলোড করা এবং পুনরায় শুরু করা হয়। যেহেতু সেশন স্টোরেজের কী
tabidউপস্থিত রয়েছে এবং তাই স্থানীয় সঞ্চয়স্থানের tabsউপ-কী সহ স্থানীয় স্টোরেজ কী tabidসাফ হয় না।
- ব্রাউজারটি লোড করা অবস্থায়, সমস্ত সেশন স্টোরেজ সাফ হয়ে যাবে। পুনরায় শুরু করার সময় সেশনটির সঞ্চয়স্থান
tabidআর উপস্থিত থাকবে না এবং একটি নতুন tabidউত্পন্ন হবে। যেহেতু স্থানীয় স্টোরেজটির কাছে এটির জন্য একটি উপ-কী tabidনেই, বা অন্য কোনও tabid(সমস্ত অধিবেশন বন্ধ ছিল), এটি পরিষ্কার হয়েছে।
- একটি নতুন তৈরি ট্যাবে,
tabidসেশন স্টোরেজে একটি নতুন উত্পন্ন হয়, তবে কমপক্ষে একটি tabs[ tabid] উপস্থিত থাকায় স্থানীয় সঞ্চয়স্থান সাফ হয় নি