有没有办法识别JavaScript中的浏览器标签?

问题描述 投票:31回答:7

我需要能够识别我在浏览器中的标签。我是否可以通过浏览器获取一些信息来识别标签?我不需要知道任何其他选项卡,我只需要我所在选项卡的ID。它可以是随机或顺序编号,或日期时间戳,只要它保持相同的标签的生命。

我有一个客户端应用程序,通过HTTP连接到远程服务器,如果我在多个选项卡中打开它,每个实例需要自己唯一的ID或应用程序失败,所以我只需要一些与之关联的唯一编号只要该选项卡存在的选项卡(即,当我浏览提供此应用程序的站点时,页面刷新后存活的内容)。看起来像是在浏览器中可以使用的明智之举,比如window.tabId - 这就是我所需要的。我有一个严肃的开发块,因为我无法通过这个似乎不存在的简单,简单,简单的解决方案。必须有一种方法(跨浏览器解决方案)。

有任何想法吗?

javascript browser tabs uniqueidentifier
7个回答
28
投票

SessionStorage是每个选项卡/窗口,因此您可以在sessionStorage中定义一个随机数,如果存在则首先获取它:

var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random();

更新: 在某些情况下,您可能在多个选项卡中具有相同的sessionStorage(例如,当您复制选项卡时)。在这种情况下,以下代码可能有助于:

var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random();
sessionStorage.closedLastTab = '2';
$(window).on('unload beforeunload', function() {
      sessionStorage.closedLastTab = '1';
});

10
投票

你必须使用html5,但sessionStorage结合随机guid似乎是你想要的。


4
投票

您无法使用javascript获取标签ID,但是有一些解决方案可以帮助您在用户打开新标签时使用不同的会话/ Cookie。

一些参考:

Get Browser Tab Index/Id

get urls of firefox tabs from firefox extension

How to differ sessions in browser-tabs?

Get a unique session in each browser tab

asp.net - session - multiple browser tabs - different sessions?


3
投票

由于我没有找到像windows.currentTabIndex那样简单的Javascript函数,我已经编写了一些Javascript行来加载每个浏览器选项卡上的ID。

function defineTabID()
    {
    var iPageTabID = sessionStorage.getItem("tabID");
      // if it is the first time that this page is loaded
    if (iPageTabID == null)
        {
        var iLocalTabID = localStorage.getItem("tabID");
          // if tabID is not yet defined in localStorage it is initialized to 1
          // else tabId counter is increment by 1
        var iPageTabID = (iLocalTabID == null) ? 1 : Number(iLocalTabID) + 1;
          // new computed value are saved in localStorage and in sessionStorage
        localStorage.setItem("tabID",iPageTabID);
        sessionStorage.setItem("tabID",iPageTabID);
        }
    }

此代码在localStorage中保存最后一个标签的索引,以更新新标签的当前值,并在sessionStorage中修复页面的标识!

我必须在我的应用程序的每个页面中调用defineTabId()函数。由于我使用JSF模板开发,这只在一个地方定义:-)


2
投票

其中一个可能的解决方案是使用“window.name”属性,但我不想使用它,因为其他人可以使用它。

我找到了另一个可能的解决方案:使用sessionStorage。它支持FF3.5 +,Chrome4 +,Safari4 +,Opera10.5 +和IE8 +。


1
投票

如果用户没有在2毫秒内打开3个选项卡的可能性,可以使用时间戳并将其存储到window.name中,并将其用作查找中的键。 window.name值将保留在选项卡中,直到它关闭。

Timestamp


-1
投票

至少对于Chrome来说,自2013年以来有一个官方答案:chrome.tabs API

© www.soinside.com 2019 - 2024. All rights reserved.