javascript中的交叉表变量,没有服务器交互

时间:2014-04-14 16:25:00

标签: javascript jquery

我正在开发一个聊天系统并得到一个我想问你的问题。

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

这样的事情
  var myvalue=getValueInAvailableTab(varName);

如果不可能,facebook如何知道聊天对话框是否已在另一个标签中关闭?他们是否在他们的服务器上发布此事件然后检索它?

对不起,我不是在偷窃行为,但这是解释我想要做的最好的例子。

2 个答案:

答案 0 :(得分:2)

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

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

在没有服务器交互的情况下,您可以通过这些方式完成所需的工作。但是,我不确定Facebook使用什么方法。

答案 1 :(得分:0)

只要浏览器标签来自同一个域,您就可以通过保留对window.open(...)的返回值的引用来跟踪它们:

var wins = {};
wins.someTab = window.open(...);
wins.someOtherTab = window.open(...);

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

wins.someTab.someVar

从该子标签内部开始:

opener.wins.someOtherTab.anotherVar