对不同选项卡中的Web应用程序更改做出反应

时间:2012-08-18 20:10:49

标签: javascript web-applications

我有一个webapplication,它同时在两个不同的浏览器窗口/标签中运行(让我们称之为a和b)。 问题是我需要对窗口b中的内容更新对标签a中的点击做出反应,需要立即进行更改。

欢迎任何建议。感谢。

1 个答案:

答案 0 :(得分:2)

浏览器标签/窗口之间的直接通信仅在其中一个窗口已使用window.open打开时才有效。如果您的应用程序出现这种情况,您可以执行以下操作(即时双向通信)。这只是一个非常基本的例子,但我相信你可以扩展它以满足你的需求。

窗口A:

var windowB = window.open("windowB.html");   //reference to window B
windowB.onload = function(){
    windowB.triggerChange();
};

function changeOK(str) {
    console.log("windowA: "+str);
}

窗口B:

var windowA = window.opener;   //reference to window A

function triggerChange() {
    console.log("windowB: triggerChange");
    windowA.changeOK("change done");
}

在尝试此操作之前,请不要忘记禁用弹出窗口阻止程序。 ;)


如果窗口A和窗口B是独立打开的,则不能使用这样的直接通信。然后,您基本上有两个选项可以完成您想要的任务(described here on SO):

  1. 使用cookies:在窗口A中设置cookie以传递数据并使用窗口B中的setTimeout定期读取cookie以对更改做出反应。请参阅this example

  2. 使用AJAX进行长轮询(Comet technique)与服务器通信。

  3. 由于两种解决方案都使用间接通信,因此它们显然无法触发窗口B中的即时更改。因此,您必须至少等待几毫秒才能更新B的内容。