我有一个html页面(main.html)使用带有window.open(“newtab.html”)方法的javascript在同一个域中打开一个新选项卡。
在新标签页中,用户点击按钮即可结束其活动。 此时我想向开启窗口发送消息。 我尝试使用postMessage但是从新标签中我无法引用开启者。
从新标签我喜欢的东西,但我“ko”
var w = window.opener;
if (w) {
w.postMessage("hi", "http://10.150.10.43");
} else {
alert("ko");
}
将消息从辅助标签/窗口发送到主要标签/窗口(在同一域中)的最佳方法是什么?
非常感谢你 卢卡答案 0 :(得分:12)
这很奇怪。使用window.open("newtab.html")
打开一个新窗口应该会让新打开的窗口通过window.opener
引用开启者。
无论如何,在同一个域的两个窗口之间进行通信还有其他几个选项。我认为以下两个最容易实现:
使用 localStorage 。如果在新选项卡窗口中将某些键下的某些数据存储到localStorage中,则opener窗口将获得存储事件。如果使用处理程序捕获事件,则可以从新选项卡窗口中读取localStorage中的数据。请注意,仅当两个页面位于同一个域上时才会触发事件,并且如果实际存在两个相同的窗口(事件不会在写入数据的同一窗口中触发)。有关如何执行此操作的详细信息,请参阅:http://diveintohtml5.info/storage.html
使用共享网络工作者。 Web worker是一个JS脚本,它在后台在单独的线程上执行。共享Web工作者是一种特殊类型的Web工作者,它允许任意数量的父文档与单个工作者进行通信。因此,您可以使用worker在开启窗口和新选项卡窗口之间中继消息。用于与工作者通信的API与postMessage API非常相似。有关如何执行此操作的详细信息,请参阅:http://www.sitepoint.com/javascript-shared-web-workers-html5/。