Мне любопытно возможность повредить запись localStorage
, перезаписав ее на двух вкладках браузера одновременно. Должен ли я создать мьютекс для локального хранилища?
Я уже думал о таком псевдоклассе:
LocalStorageMan.prototype.v = LocalStorageMan.prototype.value = function(name, val) {
//Set inner value
this.data[name] = val;
//Delay any changes if the local storage is being changed
if(localStorage[this.name+"__mutex"]==1) {
setTimeout(function() {this.v(name, val);}, 1);
return null; //Very good point @Lightness Races in Orbit
}
//Lock the mutext to prevent overwriting
localStorage[this.name+"__mutex"] = 1;
//Save serialized data
localStorage[this.name] = this.serializeData;
//Allow usage from another tabs
localStorage[this.name+"__mutex"] = 0;
}
В приведенной выше функции подразумевается менеджер локального хранилища, который управляет одним конкретным ключом локального хранилища - localStorage["test"]
, например. Я хочу использовать это для greysomonkey userscripts, где избегать конфликтов является приоритетом.