首页 > 解决方案 > 获得响应后如何刷新加载 iFrame 的页面

问题描述

我有一个名为 default.aspx 的 C# 页面,我从中打开 iFrame。一旦我得到响应,我就会在我的会话中设置值。但由于缺乏页面刷新,我无法获得页面上显示的值并隐藏 iframe。

我使用了许多可能的 Js 函数:

window.parent.location = document.referrer location.top.reload

我希望在收到 iframe 的响应后刷新我的页面

标签: javascriptc#iframeextjs

解决方案


您可以使用window.postMessage与 的父级进行通信iframe

在您的 iframe 中:

window.parent.postMessage("loaded");

在你的父母里面aspx

window.addEventListener("loaded", receiveMessage, false);

function receiveMessage(event) {
   // do reload
   window.location.reload();
}

您可以在MDN中阅读有关此 API 的更多信息。

TL;博士:

window.postMessage() 方法可以安全地启用 Window 对象之间的跨域通信;例如,在页面和它生成的弹出窗口之间,或者在页面和嵌入其中的 iframe 之间。

通常,当且仅当它们源自的页面共享相同的协议、端口号和主机(也称为“同源策略”)时,才允许不同页面上的脚本相互访问。window.postMessage() 提供了一种受控机制来安全地规避此限制(如果使用得当)。

广义上讲,一个窗口可以获得对另一个窗口的引用(例如,通过 targetWindow = window.opener),然后使用 targetWindow.postMessage() 在其上调度 MessageEvent。然后接收窗口可以根据需要自由处理此事件。传递给 window.postMessage() 的参数(即“消息”)通过事件对象暴露给接收窗口。


推荐阅读