Javascript 使用PostMessage传递窗口引用
我想使用PostMessage传递窗口引用,但得到此异常Javascript 使用PostMessage传递窗口引用,javascript,Javascript,我想使用PostMessage传递窗口引用,但得到此异常 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
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');
如何传递此窗口引用?有什么想法吗?您不能。挂在
窗口上的太多东西不会落入窗口
传递您需要的数据,而不是全部
我有一个主MainAPP应用程序(在8080中运行),因为我有一个按钮,当我单击该按钮时,它会打开一个带有新iframe的弹出窗口,并从其他服务器加载内容(在9090中运行)。当我单击弹出窗口中的取消按钮时,该弹出窗口必须关闭。因此我需要弹出窗口中父窗口(MainAPP)的窗口引用
因此iframe中的页面需要向父窗口发布一条消息,说“Close me”
然后,侦听消息的事件处理程序需要删除iframe
使JavaScript属于包含负责删除框架的框架的窗口。您不能。挂在窗口上的太多东西不会落入窗口
传递您需要的数据,而不是全部
我有一个主MainAPP应用程序(在8080中运行),因为我有一个按钮,当我单击该按钮时,它会打开一个带有新iframe的弹出窗口,并从其他服务器加载内容(在9090中运行)。当我单击弹出窗口中的取消按钮时,该弹出窗口必须关闭。因此我需要弹出窗口中父窗口(MainAPP)的窗口引用
因此iframe中的页面需要向父窗口发布一条消息,说“Close me”
然后,侦听消息的事件处理程序需要删除iframe
使JavaScript属于包含负责删除帧的帧的窗口。存在postMessage函数以跨源对话。例如,当iframe具有不同来源的站点时,它是一种能够绕过安全性(以安全的方式)的工具
您不想尝试将窗口对象发送到其中,即使您找到了一种方法
该限制的存在使得任何iframed站点都无法访问和修改其父窗口的内容。
相反,您应该定义一个可由其他站点发送和处理的消息API。但这取决于另一个站点自己来处理它们。通过这种方式,通信可以更加受限和安全。postMessage函数用于跨源通话。例如,当iframe具有不同来源的站点时,它是一种能够绕过安全性(以安全的方式)的工具
您不想尝试将窗口对象发送到其中,即使您找到了一种方法
该限制的存在使得任何iframed站点都无法访问和修改其父窗口的内容。
相反,您应该定义一个可由其他站点发送和处理的消息API。但这取决于另一个站点自己来处理它们。这样,通信可以更加受限和安全。“传递您需要的数据”(我不能说得更具体,因为您没有解释问题所在,您只是尝试了一种无法工作的解决方案)感谢Quentin,我想将窗口引用传递到其他来源(从8080应用程序到9090应用程序)在9090应用程序中需要那个窗口来做8080应用程序中的一些操作。你们在兜圈子。通过窗口
(我们已经确定这是不可能的)是达到目的的一种手段。最终目标是什么?你想用它做什么?我无法告诉您如何执行“某些操作”,因为我不知道“某些操作”是什么。我有一个主MainAPP应用程序(在8080中运行),因为我有一个按钮,当我单击该按钮时,它会打开一个带有新iframe的弹出窗口,并从其他服务器加载内容(在9090中运行)。当我单击弹出窗口中的取消按钮时,该弹出窗口必须关闭。所以我需要在弹出窗口中的父窗口(MainApp)的窗口引用。这是一个无脑的。。。你知道如何使用postMessage。。。在从iframe返回到父文档的postMessage中使用精心编制的消息来执行所需的操作。。。但是它必须是狡猾的,否则它将无法“传递您需要的数据”(我不能更具体地说,因为您没有解释问题是什么,您只是尝试了一个无法工作的解决方案)感谢Quentin,我想将窗口引用传递给其他来源(从8080应用程序到9090应用程序)在9090应用程序中需要那个窗口来做8080应用程序中的一些操作。你们在兜圈子。通过窗口
(我们已经确定这是不可能的)是达到目的的一种手段。最终目标是什么?你想用它做什么?我无法告诉您如何执行“某些操作”,因为我不知道“某些操作”是什么。我有一个主MainAPP应用程序(在8080中运行),因为我有一个按钮,当我单击该按钮时,它会打开一个带有新iframe的弹出窗口,并从其他服务器加载内容(在9090中运行)。当我单击弹出窗口中的取消按钮时,该弹出窗口必须关闭。所以我需要在弹出窗口中的父窗口(MainApp)的窗口引用。这是一个无脑的。。。你知道如何使用postMessage。。。在从iframe返回到父文档的postMessage中使用精心编制的消息来执行所需的操作。。。但它必须狡猾,否则就行不通