我有一个webapplication,它同时在两个不同的浏览器窗口/标签中运行(让我们称之为a和b)。 问题是我需要对窗口b中的内容更新对标签a中的点击做出反应,需要立即进行更改。
欢迎任何建议。感谢。
答案 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):
使用cookies:在窗口A中设置cookie以传递数据并使用窗口B中的setTimeout
定期读取cookie以对更改做出反应。请参阅this example。
使用AJAX进行长轮询(Comet technique)与服务器通信。
由于两种解决方案都使用间接通信,因此它们显然无法触发窗口B中的即时更改。因此,您必须至少等待几毫秒才能更新B的内容。