Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用PostMessage传递窗口引用_Javascript - Fatal编程技术网

Javascript 使用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

我想使用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://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中使用精心编制的消息来执行所需的操作。。。但它必须狡猾,否则就行不通