mirror of https://github.com/keeweb/keeweb.git
warning about several tabs
This commit is contained in:
parent
c2ff1686b4
commit
9a259081e6
|
@ -5,6 +5,7 @@ var AppModel = require('./models/app-model'),
|
|||
KeyHandler = require('./comp/key-handler'),
|
||||
IdleTracker = require('./comp/idle-tracker'),
|
||||
PopupNotifier = require('./comp/popup-notifier'),
|
||||
SingleInstanceChecker = require('./comp/single-instance-checker'),
|
||||
Alerts = require('./comp/alerts'),
|
||||
Updater = require('./comp/updater'),
|
||||
AuthReceiver = require('./comp/auth-receiver'),
|
||||
|
@ -78,6 +79,7 @@ $(() => {
|
|||
function showView() {
|
||||
new AppView({ model: appModel }).render();
|
||||
Updater.init();
|
||||
SingleInstanceChecker.init();
|
||||
}
|
||||
|
||||
function getConfigParam() {
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
'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;
|
|
@ -285,6 +285,8 @@
|
|||
"appSaveErrorBodyMul": "Failed to auto-save files:",
|
||||
"appSettingsError": "Error loading app",
|
||||
"appSettingsErrorBody": "There was an error loading app settings. Please double check app url or contact your administrator.",
|
||||
"appTabWarn": "Too many tabs",
|
||||
"appTabWarnBody": "KeeWeb cannot be used in two browser tabs simultaneously, please close this tab.",
|
||||
|
||||
"setGenTitle": "General Settings",
|
||||
"setGenUpdate": "Update",
|
||||
|
|
|
@ -77,6 +77,7 @@ var AppView = Backbone.View.extend({
|
|||
this.listenTo(Backbone, 'user-idle', this.userIdle);
|
||||
this.listenTo(Backbone, 'app-minimized', this.appMinimized);
|
||||
this.listenTo(Backbone, 'show-context-menu', this.showContextMenu);
|
||||
this.listenTo(Backbone, 'second-instance', this.showSingleInstanceAlert);
|
||||
|
||||
this.listenTo(UpdateModel.instance, 'change:updateReady', this.updateApp);
|
||||
|
||||
|
@ -617,6 +618,14 @@ var AppView = Backbone.View.extend({
|
|||
Backbone.trigger('context-menu-select', e);
|
||||
},
|
||||
|
||||
showSingleInstanceAlert: function() {
|
||||
this.hideOpenFile();
|
||||
Alerts.error({
|
||||
header: Locale.appTabWarn, body: Locale.appTabWarnBody,
|
||||
esc: false, enter: false, click: false, buttons: []
|
||||
});
|
||||
},
|
||||
|
||||
dragover: function(e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
|
|
|
@ -3,6 +3,7 @@ Release notes
|
|||
##### v1.4.0 (WIP)
|
||||
`+` allow password copy on mobile Safari
|
||||
`+` password generator usability improvements
|
||||
`+` warning about several tabs
|
||||
|
||||
##### v1.3.2 (2016-09-13)
|
||||
`-` fix #342: url detection in Microsoft Edge
|
||||
|
|
Loading…
Reference in New Issue