我一直在网上搜索这个问题的答案,但还没有找到一个令人满意的解决方案。我终于在JavaScript中整理了一些类似的东西。
//generate a random ID, doesn't really matter how
if(!sessionStorage.tab) {
var max = 99999999;
var min = 10000000;
sessionStorage.tab = Math.floor(Math.random() * (max - min + 1) + min);
}
//set tab_id cookie before leaving page
window.addEventListener('beforeunload', function() {
document.cookie = 'tab_id=' + sessionStorage.tab;
});
HTML5不在选项卡之间共享,因此我们可以在那里存储唯一的选项卡ID。侦听窗口上的事件告诉我们要离开(并加载其他页面)。通过在离开之前设置 Cookie,我们可以在新请求中包含我们的值,而无需任何额外的 URL 操作。要区分选项卡,您只需要检查服务器并适当地存储会话值即可。sessionStorage
beforeunload
$_COOKIE['tab_id']
请注意,Firefox 的行为很奇怪,因为触发将创建一个与其父级共享的窗口,为您提供两个具有相同 ID 的选项卡。手动打开一个空白选项卡,然后导航到目标 URL 将为您提供单独的存储空间。到目前为止,Chrome在我所有的测试中都适用于我。window.open()
sessionStorage
我意识到这可能不是正确的答案,甚至不是一个“好”的答案,但这是一个答案。