मैं आज localStorage का उपयोग कर इस संगामिति मुद्दा में भाग (दो साल में परिवर्तन ..)
परिदृश्य: एक ब्राउज़र (जैसे क्रोम) के एकाधिक टैब समान स्क्रिप्ट कोड का निष्पादित कि, मूल रूप से एक ही समय में है (बुलाया उदाहरण के लिए सिग्नलआर)। कोड स्थानीय स्टोरेज को पढ़ता है और लिखता है। चूंकि टैब विभिन्न प्रक्रियाओं में चलते हैं लेकिन सामूहिक रूप से साझा स्थानीय संग्रहण तक पहुंचते हैं, पढ़ना और लिखना अनिर्धारित परिणामों की ओर जाता है क्योंकि लॉकिंग तंत्र यहां गायब है। मेरे मामले में मैं यह सुनिश्चित करना चाहता था कि टैब में से केवल एक ही वास्तव में स्थानीय भंडारण के साथ काम करता है और उनमें से सभी नहीं ..
मैंने ऊपर दिए गए प्रश्न में बेंजामिन Dumke-von der Ehe की लॉकिंग तंत्र की कोशिश की लेकिन मुझे मिला अवांछित परिणाम।
localStorage ताला:
Object.getPrototypeOf(localStorage).lockRndId = new Date().getTime() + '.' + Math.random();
Object.getPrototypeOf(localStorage).lock = function (lockName, maxHold, callback) {
var that = this;
var value = this.getItem(lockName);
var start = new Date().getTime();
var wait = setInterval(function() {
if ((value == null) || (parseInt(value.split('_')[1]) + maxHold < start)) {
that.setItem(lockName, that.lockRndId + '_' + start);
setTimeout(function() {
if (that.getItem(lockName) == (that.lockRndId + '_' + start)) {
clearInterval(wait);
try { callback(); }
catch (e) { throw 'exeption in user callback'; }
finally { localStorage.removeItem(lockName); }
}
}, 100);
}
}, 200);
};
उपयोग:
localStorage तो मैं अपने ही प्रयोगात्मक कोड रोल करने का फैसला किया।लॉक (लॉकनाम, maxHold, कॉलबैक);
- lockName - ताला के लिए एक वैश्विक गुंजाइश अद्वितीय नाम - स्ट्रिंग
- maxHold - मिलीसेकेंड में स्क्रिप्ट की रक्षा के लिए अधिक से अधिक समय - पूर्णांक
- कॉलबैक - समारोह स्क्रिप्ट से युक्त यह सुरक्षित हो जाता है
उदाहरण: "केवल एक ध्वनि चलाएं ई टैब "
//var msgSound = new Audio('/sounds/message.mp3');
localStorage.lock('lock1', 5000, function(){
// only one of the tabs/browser processes gets here at a time
console.log('lock aquired:' + new Date().getTime());
// work here with local storage using getItem, setItem
// e.g. only one of the tabs is supposed to play a sound and only if none played it within 3 seconds
var tm = new Date().getTime();
if ((localStorage.lastMsgBeep == null)||(localStorage.lastMsgBeep <tm-3000)) {
localStorage.lastMsgBeep = tm;
//msgSound.play();
console.log('beep');
}
});
स्रोत
2016-01-22 20:22:20
यह बहुत ही स्वीकार्य उपयोग कुकीज़ है? – lindosekai
becouse localStorage अब क्रोम – lindosekai