Определите, открывал ли браузер URL - PullRequest
0 голосов
/ 08 сентября 2018

Мы используем внутреннюю систему (с FF в качестве браузера по умолчанию)

Нам нужно избегать того, чтобы пользователь открывал один и тот же URL в разных вкладках. Поскольку вкладки используют один и тот же сеанс PHP, мы получаем беспорядок. Так что на самом деле я ищу способ программной проверки, если определенный URL уже открыт в одной из открытых вкладок. Клиентская сторона (JS) или серверная сторона (PHP).

Теперь мы используем расширение FF "Duplicate Tabs Closer", которое помогает. Но я бы предпочел сохранить полный контроль (предупредить, выбрать, по какому URL он работает).

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Отработав ответ Александра, вы можете сохранить карту cookie с количеством открытий URL в файле cookie. Когда страница открыта, увеличьте число или установите его на 0. Когда страница закрыта, уменьшите ее или удалите.

function incrementTabsOpen() {
    let tabsOpen = readObjCookie('tabsOpen') || {};
    if (tabsOpen[window.location.href]) tabsOpen[window.location.href]++;
    else tabsOpen[window.location.href] = 0;
    writeObjCookie('tabsOpen', tabsOpen);
}
function decrementTabsOpen() {
    let tabsOpen = readObjCookie('tabsOpen') || {};
    if (tabsOpen[window.location.href]) tabsOpen[window.location.href]--;
    if (tabsOpen[window.location.href] === 0) delete tabsOpen[window.location.href];
    writeObjCookie('tabsOpen', tabsOpen);
}

// https://stackoverflow.com/a/11344672/3783155
function readObjCookie(name) {
    let result = document.cookie.match(new RegExp(name + '=([^;]+)'));
    if (result) result = JSON.parse(result[1]);
    return result;
}
function writeObjCookie(name, value) {
    document.cookie = name + '=' + JSON.stringify(value);
}

и

window.addEventListener('load', function() {
    incrementTabsOpen();
};
window.addEventListener('unload', function() {
    decrementTabsOpen();
};
0 голосов
/ 08 сентября 2018

Вы можете написать cookie после того, как ваша страница загружена на первой вкладке, проверить ее на стороне сервера и показать предупреждение пользователя вместо реального содержимого страницы, если этот cookie установлен и вторая вкладка открыта. Для обработки случая, когда пользователь закрывает единственную открытую вкладку, вы можете удалить этот cookie в обработчике onbeforeunload.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...