如何使用PHP或JavaScript获取所有浏览器当前打开选项卡的URL?

3

如果有人能够提供一些指导或者对如何实现此事有一点了解的话,请告诉我。

谢谢


3
除非使用非常不安全或已损坏的浏览器,否则这是不可能的。 - George Cummins
可以通过扩展(Firefox,Chrome等)来实现这一点,但没有它就不行。 - Alfred
1
你认为用 PHP 怎么能实现这个功能?PHP 运行在服务器上,无法直接访问用户的浏览器。 - Felix Kling
哦,抱歉,我们不能用PHP做到这一点。任何JavaScript脚本都可以使用。 - Zeeshan
这个问题的答案使用Javascript解释了如何实现:https://dev59.com/w2ct5IYBdhLWcg3wqfL9 - Anderson Green
显示剩余2条评论
3个回答

10
你无法获取此信息,除非你已经有一个参考窗口(除了你已经有引用的窗口)。你可以理解为什么会这样。你不希望你标签页中的网站所有者能够知道你所有其他标签页正在显示什么,否则这将严重侵犯你的隐私。
对于你已经有引用的窗口,你可以获取它正在显示的网址(window.location.href),以及可能是其父窗口(window.parent.location.href)、顶级窗口(window.top.location.href)和下属框架(window.frames[n].location.href - 我想是这样)。但这并不能让你获得你请求的标签页。
这些信息可能通过各种浏览器的扩展机制(Firefox插件、Chrome扩展等)获得,但这只针对浏览器扩展,需要用户显式安装,并且(目前)需要为每个浏览器供应商编写一个扩展程序,而并非所有供应商都提供扩展机制。
另外:此信息肯定没有发送到服务器端(你标记了你的问题php)。

此外,@Tariq,你能想象一个网站能够看到你打开了哪些其他网站或者你最近访问了哪些网站吗?你对此有何感受? - Matt Asbury
1
@Matt 实际上存在一个漏洞,允许任何网站猜测浏览历史中的页面。这是基于访问链接可以以不同颜色显示,并且JS可以读取其结果样式(因此您可以逐个猜测URL,将它们输入某个地方并检查其颜色以查看它们是否被访问)。但据我所知,现代浏览器已经修复了这个问题。 - Tadeck
1
@Matt 更新我的最新评论:Opera 似乎仍然容易受到这种“攻击”的影响:http://jsfiddle.net/ePVas/1/(在 Opera 中,JS 能够确定由于链接之前被访问而导致的不同颜色)。 - Tadeck
1
@T.J. Crowder:我也感到惊讶。这里的问题是攻击者可以无限次尝试“检查”任意数量的URI,甚至不必显示它们(http://jsfiddle.net/ePVas/2/)。即使最近安装了更新(Opera 11.50),它仍然存在...是的,相当令人震惊,但我认为更大的威胁是旧版IE,因为它们仍然占据着相当大的市场份额。 - Tadeck
@T.J. Crowder:谢谢,很高兴知道只有Opera在这里没有提供适当的安全性。我没想到 :) - Tadeck
显示剩余2条评论

4

如果您希望从网页上执行此操作,则无法通过服务器端或客户端执行的任何语言来实现。

如果您是在Firefox插件上下文中提出此问题,这可能会有所帮助:

var tabs = require("tabs");
for each (var tab in tabs)
  console.log(tab.url);

但这仅适用于Firefox插件,而不是普通的JavaScript。
参考链接: https://addons.mozilla.org/en-US/developers/docs/sdk/1.0/packages/addon-kit/docs/tabs.html 希望这有所帮助。

如何使用此代码并获取选项卡的URL。这是JavaScript代码吗?如果是,那么我该如何使用它?如果不是,是否有任何API可以让我使用此功能? - Zeeshan
如果您正在开发Firefox插件,则可以使用此代码获取选项卡信息,但此代码不适用于浏览器JavaScript。以下链接应该能帮助您入门:https://developer.mozilla.org/en/extensions - Pheonix
实际上我不想创建一个扩展,我想制作一个HTML页面,当我点击一个按钮时,它会给我所有当前打开的标签页的URL列表。 - Zeeshan
那么,在当前的网络环境下,这个问题目前没有解决方案。 - Pheonix
@Zeeshan 实际上,扩展是一种在浏览器环境中运行的 HTML 页面(带有一些脚本和样式),否则就无法使用浏览器的 API... 但在某些情况下,您可以在 Omnibox 中运行 JavaScript,或者所谓的“书签小程序”。 - AndriuZ

0
其实有一种方法,只需将所有选项卡添加为书签,然后将书签拖到某个地方,例如HTML表单,然后您可以使用JavaScript从那里读取。我还不知道其他浏览器,但在Firefox中,您会得到书签名称,后跟所有URL,每行用换行符分隔,末尾没有换行符。

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