在浏览器中访问其他选项卡的内容

Posted

技术标签:

【中文标题】在浏览器中访问其他选项卡的内容【英文标题】:Accessing the content of other tabs in a browser 【发布时间】:2011-03-13 07:46:51 【问题描述】:

我正在使用 Mozilla Firefox,我正在尝试找出一种方法来使用 javascript 和 DOM 访问同一窗口中其他选项卡的内容(如果存在其他技术,我愿意接受)。

例如,我想在 tab1 中运行 JavaScript 代码,它可以找到其他选项卡的标题。基本上我需要这个,以便我可以在不使用window.open 方法的情况下识别在当前页面中由于href 而打开的选项卡。我想要的只是一个简单的超链接,它打开一个与当前页面属于同一域的页面(该页面应该在新选项卡中打开)。现在我希望能够从当前选项卡访问这个新选项卡。

【问题讨论】:

也许看看 WebStorage 和 IndexedDB。 【参考方案1】:

虽然您可以使用 JavaScript 轻松打开一个新窗口,但我敢肯定它已经做到了。从安全的角度来看,您不希望一个选项卡中的 JavaScript 能够查询/访问另一个选项卡中的 DOM。如果两个网站都在不同的选项卡中打开,那么任何网站都可以访问您的银行帐户详细信息等。

【讨论】:

是的..我知道。但是,正如我之前提到的,新的选项卡/窗口将属于同一个域,所以我不可能从我自己的网站“窃取”银行账户详细信息。无论如何,感谢您的及时回复……但需要为此找到解决方法。 - 再次感谢 您可以通过跟踪服务器端打开的标签页来创建类似的效果吗?例如。假设您有意对某些链接进行编码以在新选项卡中打开,那么您知道用户打开了两个选项卡。此外,如果您有客户端 js (ajax) 从两个选项卡每隔几秒钟“签入”一次,则可以通过服务器中继选项卡间通信。例如。也许选项卡 1 正在编辑“动物园”对象并将其名称从“波士顿”更改为“丹佛”。选项卡 2 是“波士顿动物园动物”,您可以在其中更改动物园中的动物。选项卡 2 通过 ajax 更新更新为“Denver Zoo Animals”。【参考方案2】:

如果新窗口/标签是用 JavaScript 打开的,并且页面确实在同一个域中,您可以访问它。

你可以像这样打开窗口/标签

var win = window.open("/path_to_page");

然后您必须等待页面加载才能访问,例如标题。

win.onload = function() alert(win.document.title); ;

【讨论】:

只要确保两个页面具有相同的来源,否则您将收到以下错误:Blocked a frame with origin "http://x" from accessing a frame with origin "http://y". Protocols, domains, and ports must match.【参考方案3】:

您可以使用html5 cross-window messaging (archive.org link...但这是一种前沿。

即使在这种情况下,您也可能需要使用 JavaScript 劫持 标签的“点击”事件并自己打开窗口,这样您就可以访问新的窗口对象来发布消息。

【讨论】:

看起来我们在过去六年里向前迈出了一大步 :) caniuse.com/#feat=x-doc-messaging @Loupax 只要你是not supporting IE。【参考方案4】:

尝试设置一个可访问同一域中任何页面的 cookie。在其他页面上,使用 JavaScript 计时器检查 cookie 值是否已更改,当它发生更改时,您可以使用其值并采取行动。

它对我有用。

【讨论】:

或者你可以使用localStorage;但 cookie 更适用于旧版浏览器。

以上是关于在浏览器中访问其他选项卡的内容的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2 和 Flask:引导选项卡仅显示第一个选项卡的内容,而不显示其余选项卡的内容

使用 Vue.js 跨浏览器选项卡的反应式 localStorage 对象

选项卡内容布局显示在其他选项卡中

更改 QTabWidget 中选定选项卡的光标

如何在 Qt 中访问父选项卡的属性?

访问 QTabWidget 中选项卡的小部件