我有一个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"); }
将消息从辅助选项卡/窗口发送到主选项卡(在同一域中)的最佳方法是什么?
非常感谢你
卢卡
解决方法
这很奇怪.使用window.open(“newtab.html”)打开一个新窗口应该让新打开的窗口能够通过window.opener引用开启器.
无论如何,在同一域上的两个窗口之间进行通信还有其他几种选择.我认为以下两个最容易实现:
>使用localStorage.如果在新选项卡窗口中将某些键下的某些数据存储到localStorage中,则opener窗口将获得存储事件.如果使用处理程序捕获事件,则可以从新选项卡窗口中读取localStorage中的数据.请注意,仅当两个页面位于同一个域上时才会触发事件,并且如果实际存在两个相同的窗口(事件不会在写入数据的同一窗口中触发).有关如何执行此操作的详细信息 – 请参阅:例如:http://diveintohtml5.info/storage.html
>使用共享Web工作者. Web worker是一个JS脚本,它在后台在单独的线程上执行.共享Web工作者是一种特殊类型的Web工作者,它允许任意数量的父文档与单个工作者进行通信.因此,您可以使用worker在开启窗口和新选项卡窗口之间中继消息.用于与工作者通信的API与postMessage API非常相似.有关如何执行此操作的详细信息,请参阅:例如:http://www.sitepoint.com/javascript-shared-web-workers-html5/.