Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在两个浏览器窗口之间通信?_Javascript - Fatal编程技术网

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

Javascript 如何在两个浏览器窗口之间通信?,javascript,Javascript,我有一个父浏览器窗口p。单击按钮后,将打开一个新的浏览器窗口WIN-a。 然后再次按下相同的按钮,它应该读取WIN-A窗口的标题并打开WIN-B 如何使用Javascript实现这一点 提前感谢最近有人问了一个类似的问题: 堆栈溢出问题: 以此为基础(前提是家长和WIN-a在同一个域中): 鉴于: 旧方法:更改窗口对象的名称属性: myWindow.name = "..."; // in foo.bar: setInterval(someFunctionToCheckForChangesInNa

我有一个父浏览器窗口p。单击按钮后,将打开一个新的浏览器窗口WIN-a。 然后再次按下相同的按钮,它应该读取WIN-A窗口的标题并打开WIN-B

如何使用Javascript实现这一点


提前感谢

最近有人问了一个类似的问题:

堆栈溢出问题:

以此为基础(前提是家长和WIN-a在同一个域中):

鉴于:

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

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);

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


加布里埃尔

我从未见过(可能是现在的一个|可能是现在的两个)(args,args);以前的技术。酷毙了。特雷弗:别忘了使用
.call(对象,即父母,args)
如果它不是
窗口的属性
。使用奇特的赋值和速记操作很酷,但对于这样一个主要关注点是分享知识的页面,这不是最好的方法。对JS“| |”或作业不满意的人必须认为它看起来神秘而不直观。
myWindow.name = "...";
// in foo.bar:
setInterval(someFunctionToCheckForChangesInName, 100);
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);