mirror of https://github.com/keeweb/keeweb.git
41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const Backbone = require('backbone');
|
||
|
const Launcher = require('./launcher');
|
||
|
|
||
|
const LocalStorageKeyName = 'instanceCheck';
|
||
|
const LocalStorageResponseKeyName = 'instanceMaster';
|
||
|
|
||
|
let instanceKey = Date.now().toString();
|
||
|
|
||
|
let SingleInstanceChecker = {
|
||
|
init: function() {
|
||
|
if (Launcher) {
|
||
|
return;
|
||
|
}
|
||
|
window.addEventListener('storage', SingleInstanceChecker.storageChanged);
|
||
|
SingleInstanceChecker.setKey(LocalStorageKeyName, instanceKey);
|
||
|
},
|
||
|
|
||
|
storageChanged: function(e) {
|
||
|
if (!e.newValue) {
|
||
|
return;
|
||
|
}
|
||
|
if (e.key === LocalStorageKeyName && e.newValue !== instanceKey) {
|
||
|
SingleInstanceChecker.setKey(LocalStorageResponseKeyName, instanceKey + Math.random().toString());
|
||
|
} else if (e.key === LocalStorageResponseKeyName && e.newValue.indexOf(instanceKey) < 0) {
|
||
|
window.removeEventListener('storage', SingleInstanceChecker.storageChanged);
|
||
|
Backbone.trigger('second-instance');
|
||
|
}
|
||
|
},
|
||
|
|
||
|
setKey: function(key, value) {
|
||
|
try {
|
||
|
localStorage.setItem(key, value);
|
||
|
setTimeout(() => { localStorage.removeItem(key); }, 100);
|
||
|
} catch (e) {}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = SingleInstanceChecker;
|