javascript中无服务器交互的交叉表变量

javascript中无服务器交互的交叉表变量,javascript,jquery,Javascript,Jquery,我正在开发一个聊天系统,我想问你一个问题 我不认为这是可能的,但由于我在一些网站上看到类似的行为,我想知道如何访问在其他选项卡中定义/修改的变量?我的意思是我不想把它发送到服务器。如何做像 var myvalue=getValueInAvailableTab(varName); 如果不可能,facebook如何知道聊天对话框是否已在其他选项卡中关闭?他们是否在服务器上发布此事件,然后检索它 很抱歉,我没有窃取行为,但这是解释我想做什么的最佳示例。只要浏览器选项卡来自同一个域,您就可以通过引

我正在开发一个聊天系统,我想问你一个问题

我不认为这是可能的,但由于我在一些网站上看到类似的行为,我想知道如何访问在其他选项卡中定义/修改的变量?我的意思是我不想把它发送到服务器。如何做像

  var myvalue=getValueInAvailableTab(varName);
如果不可能,facebook如何知道聊天对话框是否已在其他选项卡中关闭?他们是否在服务器上发布此事件,然后检索它


很抱歉,我没有窃取行为,但这是解释我想做什么的最佳示例。

只要浏览器选项卡来自同一个域,您就可以通过引用
窗口的返回值来跟踪它们。打开(…)

然后访问该选项卡中的全局变量:

wins.someTab.someVar
从该子选项卡内部:

opener.wins.someOtherTab.anotherVar

在大多数情况下,您的问题的答案是您无法访问另一个选项卡中的Javascript变量。但是,在选项卡之间传递数据还有其他方法:

  • 您可以创建具有所需功能的浏览器扩展。尽管不同的浏览器框架在访问打开的页面代码时有不同的限制
  • 如果保证窗口由同一父窗口打开,则可以使用
    window.parent
    window.opener
  • 如果两个选项卡来自同一个源站点,则可以让一个选项卡在cookie中存储该值,并让另一个选项卡检索该值

这些都是无需服务器交互即可完成所需任务的方法。但是,我不确定Facebook使用什么方法。

在某些情况下,您可以使用
opener
。类似但可能比使用cookie更容易,您可以使用本地存储或会话存储绝对正确。在回答此问题时,本地存储没有目前那么多的支持。我将花时间更新这个现在得到广泛支持的选项。
opener.wins.someOtherTab.anotherVar