我们使用内部系统(默认浏览器为FF)
我们需要避免用户在不同的标签中打开相同的URL。 由于选项卡共享相同的PHP会话,因此一团糟。 因此,实际上,我正在寻找一种以编程方式检查某些URL是否已在打开的选项卡中打开的方法。 客户端(JS)或服务器端(PHP)。
我们现在使用FF扩展“ Duplicate Tabs Closer”有帮助。 但我希望保持完全控制(发出警告,请选择适用于哪个URL)。
答案 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();
};