warning about several tabs

This commit is contained in:
antelle 2016-09-16 20:33:38 +03:00
parent c2ff1686b4
commit 9a259081e6
5 changed files with 54 additions and 0 deletions

View File

@ -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() {

View File

@ -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;

View File

@ -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",

View File

@ -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();
},

View File

@ -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