如何在两个浏览器窗口之间进行通信?

7

我有一个父浏览器窗口P。点击一个按钮会打开一个新的浏览器窗口WIN-A。再次按下相同的按钮,应该读取WIN-A窗口的标题并打开WIN-B。

如何使用Javascript实现这一点?

提前感谢。

3个回答

6

给定:

var myWindow = open("foo.bar");

旧方法:更改窗口对象的name属性:

myWindow.name = "...";
// in foo.bar:
setInterval(someFunctionToCheckForChangesInName, 100);

HTML5方法:调用窗口对象的postMessage方法:

myWindow.postMessage("...", "*");
// in foo.bar:
(window.addEventListener || window.attachEvent)(
  (window.attachEvent && "on" || "") + "message", function (evt) {
    var data = evt.data; // this is the data sent to the window
    // do stuff with data
  },
false);

3
我以前从未见过 (可能存在的函数一 || 可能存在的函数二) (参数, 参数); 的技巧。酷! - Trevor Harrison
Trevor:如果它不是window的属性,请不要忘记使用.call(the_object_that_is_supposed_to_be_the_parent, args) - Eli Grey
使用花式赋值和简写操作很酷,但对于像SO这样主要关注分享知识的页面来说,这不是最好的方法。不熟悉JS“||”或赋值的人可能会觉得它看起来晦涩难懂,缺乏直观性。 - Kenneth Lynne

3

最近刚刚有一个类似的问题:

Stack Overflow问题:使用window.open()创建弹出窗口,最快的传递数据方法是什么?

以此为基础(假设父页面和WIN-A在同一域名下):

// Put outside click handler
var winA = null;

// Put inside click handler

if(!winA){
    // Store the return of the `open` command in a variable
    var winA = window.open('http://www.mydomain.com/page1');
} else {
    var title = winA.document.title;
    // Do something with title
    var winB = window.open('http://www.mydomain.com/page2');
}

0
当您调用window.open时,它会返回对新打开窗口的引用。您可以将打开的窗口的引用存储在数组中,然后在需要打开另一个新窗口时迭代该数组。
加布里埃尔

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接