确定浏览器是否已打开URL

问题描述 投票:2回答:2

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

我们需要避免用户在不同的标签页中打开相同的网址。由于标签共享相同的PHP会话,我们得到了一个烂摊子。实际上,我正在寻找以编程方式检查是否已在其中一个打开的选项卡中打开某个URL的方法。客户端(JS)或服务器端(PHP)。

我们现在使用FF扩展“Duplicate Tabs Closer”,它有所帮助。但我宁愿保持完全控制(发出警告,选择它的工作URL)。

javascript php firefox browser
2个回答
2
投票

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


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();
};
© www.soinside.com 2019 - 2024. All rights reserved.