我想使用PostMessage传递Window引用但是获得此异常
Uncaught DataCloneError: Failed to execute 'postMessage' on 'Window': An object could not be cloned.
下面是我的代码:
var postWindow = window.document.getElementById('dummyId').contentWindow;
postWindow.postMessage(window, 'http://localhost:9090');
如何传递此Window引用?有什么想法吗?
答案 0 :(得分:4)
你做不到。悬挂在window
之外的东西不会落入supported types。
传递您需要的数据,而不是绝对所有。
我有主要的MainAPP应用程序(在8080中运行),因为我有一个按钮,当我点击该按钮时,它打开一个带有新iframe的弹出窗口并从其他服务器加载内容(在9090中运行)。当我点击取消时弹出窗口中的按钮,弹出窗口必须关闭。所以我需要在弹出窗口中显示父(MainApp)的窗口引用。
因此,iframe中的页面需要向父窗口发送一条消息,说“关闭我”。
事件处理程序处理程序侦听该消息然后需要删除iframe。
使JavaScript属于包含负责删除框架的框架的窗口。
答案 1 :(得分:1)
postMessage函数用于交叉交叉起源。当例如iframe具有不同来源的站点时,它是一种能够绕过安全性(以安全的方式)的工具。
即使您找到了办法,也不想尝试将窗口对象发送到其中。
存在限制,以便任何iframed站点都无法访问和修改其父窗口的内容。 相反,您应该定义可由其他站点发送和处理的消息API。但是由另一个站点自己处理它们。这样,沟通可以更加有限和安全。