我已经尝试了一段时间来解决这个问题,我也看到了很多类似的问题,但并不完全是我想要的。
我有一个.php页面作为父页面,它有一个iFrame,它显示一个.aspx页面。我想做的是:当用户单击aspx页面中的一个按钮时,关闭模式iframe并返回到php页面。
parent.php
+-------------------------------------------+
| |
| |
| "survey" |
| CloseSurvey() |
| +--------------------------+ |
| | | |
| | | |
| | child.aspx | |
| | +---------------+ | |
| | | | | |
| | | btnClose | | |
| | | | | |
| | | | | |
| | | | | |
| | +---------------+ | |
| | | |
| | | |
| +--------------------------+ |
| |
+-------------------------------------------+
void btnClose_Click(object sender, EventArgs e)
{
//Close iframe
}我试过了
ClientScript.RegisterStartupScript(typeof(Page), "CLOSEWINDOW", "parent.CloseSurvey()");它什么也没做。没有错误,也不会关闭。
我一直在试图找出如何在父母中调用该方法,但我仍然无法弄清楚。
如何关闭从child.aspx弹出的模态iframe??
发布于 2014-01-15 00:14:29
如果您的php和aspx页面位于相同的域中,则可以这样做:
在PHP页面上有一个名为closeIframe的公共方法
单击.aspx页面中的“关闭”按钮,使用window.parent.closeIframe从父级调用closeIframe方法。
根据您的需求,PHP页面中的closeIframe方法可以隐藏或删除iframe。
如果您的php和aspx页面位于不同的域上,则可以实现类似的功能,但需要使用window message events。
另外,如果关闭按钮不需要调用任何服务器端代码,我建议您使用<a>标记制作关闭按钮。
编辑:
因为aspx页面位于子域中,所以解决方案将涉及窗口消息事件。
在“关闭”按钮上单击“从aspx调用脚本”:
window.parent.postMessage("closeframe", "*");php页面上用于侦听消息的代码:
function listenMessage(event) {
switch(event){
case "closeframe":
//logic to close the iframe
break;
}
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}发布于 2014-01-15 00:03:47
你不会真的关闭一个<iframe>。要么更改Element.src,要么使用Element.innerHTML = ''或Element.removeChild(otherNode)删除元素。使用frames[number]从.aspx文件中使用JavaScript从.aspx中获取JavaScript。
https://stackoverflow.com/questions/21126299
复制相似问题