获取浏览器标签页的索引/ID

10

大多数现代浏览器都支持标签页,是否有一种方法可以获取标签页的索引?

例如,Tab 1 打开了 www.google.com,Tab 2 也打开了 www.google.com,是否有一种方法可以确定 Tab 的索引?

伪代码:

if($tab == 2) {
  alert "Tab 2 is active\n";
}

if($tab == 1) {
  alert "Please use Tab 2 as this is Tab 1\n";
}

有趣的是,我搜索有关选项卡的所有内容都与网页本身的选项卡索引有关,唉...


除了浏览器插件之外,这样的信息有什么使用场景呢? - Boldewyn
1
就我个人而言,如果我进入一个网站并弹出一个窗口或其他类似的东西,显示“您有选项卡1处于活动状态”或类似的内容。我会换浏览器,直到这种情况得到解决,并抵制我正在使用的网站。 :D - Dan
@Dan,哈哈我也会这样想,这更像是一个内部网站,有人高层提出了问题。只是想给出诚实的答案,并且好奇是否“可能”做到 ;) - Phill Pafford
+1 如果没有那种“能做到”的态度,我们会在哪里?一无所有。 - Ben
1
http://stackoverflow.com/questions/1028630/get-urls-of-firefox-tabs-from-firefox-extension - mplungjan
显示剩余3条评论
5个回答

7
严格来说,选项卡是在最终用户的计算机上。PHP 在服务器上运行。PHP 不能看到最终用户的计算机正在做什么,它只能为最终用户提供 PHP 页面。
谷歌使用 JavaScript 和 Cookies 实现此功能。对于每个打开的页面实例,递增一个 Cookie 计数器。如果计数器 > 1,则使用 AJAX 显示错误消息。此外,如果禁用了 Cookies 或 JavaScript,则禁止页面正常工作。
研究一下 jQuery。

谢谢,我知道PHP是一种服务器端语言,但我在想可能会设置一个环境变量,比如USER_AGENT,可能会给出一些线索。我将尝试使用cookie页面计数器的想法,谢谢。 - Phill Pafford

1

就确定绝对标签索引而言,我不知道有什么方法可以使用Javascript实现。您可以通过它们的名称来识别窗口,但无法识别其他任何内容。

在您的两个包含相同网页的选项卡示例中,您应该能够通过使它们彼此感知来唯一地识别它们。您需要使用cookie来实现这一点。基本上,当加载页面时,它会检查一个cookie,告诉它当前已加载的页面的其他实例,并相应地做出决策。

在这种情况下,您的onload处理程序将检查cookie并注册正在加载的页面。您还需要一个onunload处理程序来取消与正在卸载的页面相关的cookie。

有关如何使用Javascript在浏览器选项卡/窗口之间进行通信的更多信息,请参见Javascript communication between browser tabs/windows


0

在 PHP 中:绝对不可能 - 它在您的服务器上执行,无法访问客户端浏览器。

也许使用 JavaScript 有解决方案(但我从未听说过这种方法,而且我相当确定这也不可能成为跨浏览器的解决方案)。

我认为您最好的机会(如果有的话)是使用其他客户端语言,如 Flash、Silverlight 或 Java 插件,因为它们可以比 JavaScript 做更多的事情 - 但很抱歉我不太了解这些语言,无法提供更多信息或提示。


谢谢,我同意你的观点,即使是从客户端语言来说,这可能也不可能实现。有人问了这个问题,让我印象深刻,只是想知道一下。谢谢。 - Phill Pafford

0

别再浪费时间了,伙计。这是不可能的,主要是因为浏览器内的任何网页都无法获取此类信息,由于安全限制。

尝试寻找其他人在评论中提出的替代方法。


0

我确定没有全局变量来支持这个信息。但是像Firefox或Google Chrome这样聪明的浏览器可能会在此方面提供一些支持。我在网上进行了快速搜索,找到了以下内容。

首先,请检查Mozilla Tab Helper是否可以与Mozilla一起使用。但请记住,这永远不会是跨浏览器的解决方案。此外,我认为没有跨浏览器的解决方案。

第二种方法是,如果您想将其用于自己的用途,则可能有用,我没有测试过。这是一个插件。这里是Open Tab Count Mozilla Addon

Open Tab Preview


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接