我们说我有一个域名为 a.example.com 的网页,该网页的域名为 b.example.com 的iframe(不满意)同源政策)。
现在我使用带有相同域的iframe中的window.open打开一个新窗口,即 的 b.example.com
我的任务是将邮件发送回iframe。
对于打开的窗口,window.opener 为空。
我读到我可以使用postMessage进行通信,但是我应该将数据发布到哪个元素。如何获得父窗口的引用(即iframe)。
答案 0 :(得分:0)
谁说iframe是你的?浏览器在这方面无法信任您,因为有人可能会弄乱您的页面并加载其他内容,因此现代浏览器会完全锁定iframe通信。即使使用访问控制,您也无法进行双向通信。
但是,如果您可以使iframe和拥有文档“说同一种语言”,那么您可以使用postMessage通信:postMessage基本上发布字符串(和仅字符串,所以任何JS对象都需要JSON.stringified)成为“每个人都可见”的字符串桶。任何文档上下文都可以发布消息,每个上下文都可以决定是否发布新消息。如果是,则可以使iframe发送拥有窗口可以解析的消息,反之亦然。
答案 1 :(得分:0)
为了保存您控制其内容的iframe
的网站,从通过点击内容中的内容打开的窗口中获取信息,他们必须允许访问您的网站在他们的。如果您只想通过点击您控制的页面上的某个内容打开的窗口中的数据,请执行以下操作:
var newWindow = open('yourURL.php');
var someElement = newWindow.document.getElementById('someId');
console.log(someElement.value); // assuming it's an input
如果您想要打开其他页面的页面中的信息与新打开的窗口一样,那就像:
var openerElement = opener.document.getElementById('openerWindowId');
console.log(openerElement.innerHTML); // assuming it's not an input