确定浏览器是否已打开URL

时间:2018-09-08 09:47:34

标签: javascript php firefox browser

我们使用内部系统(默认浏览器为FF)

我们需要避免用户在不同的标签中打开相同的URL。 由于选项卡共享相同的PHP会话,因此一团糟。 因此,实际上,我正在寻找一种以编程方式检查某些URL是否已在打开的选项卡中打开的方法。 客户端(JS)或服务器端(PHP)。

我们现在使用FF扩展“ Duplicate Tabs Closer”有帮助。 但我希望保持完全控制(发出警告,请选择适用于哪个URL)。

2 个答案:

答案 0 :(得分:2)

您可以在页面加载到第一个选项卡中之后编写cookie,在服务器端对其进行检查,如果设置了该cookie并打开了第二个选项卡,则向用户显示警告而不是实际页面内容。要处理用户关闭唯一打开的选项卡的情况,您可以在onbeforeunload处理程序中删除该Cookie。

答案 1 :(得分:2)

根据Oleksandr的回答,您可以在cookie中存储打开URL次数的映射。打开页面时,增加数字或将其设置为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();
};