单击按钮时关闭iframe中的iframe(parent:php,child:aspx)

时间:2014-01-14 23:33:56

标签: javascript php asp.net iframe

我一直试图弄清楚这一点,我看到很多类似的问题,但不完全是我正在寻找的。

我有一个.php页面作为父页面,它有一个显示.aspx页面的iFrame。 我想要做的是:当用户单击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弹出窗口

2 个答案:

答案 0 :(得分:1)

如果你的php和aspx页面在相同的域上,你可以这样做:

PHP页面上的

有一个名为closeIframe

的公共方法

单击.aspx页面上的关闭按钮,使用closeIframe

从父级调用window.parent.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);
}

答案 1 :(得分:0)

你并没有真正关闭<iframe>。您可以使用Element.srcElement.innerHTML = ''更改Element.removeChild(otherNode)或删除元素。使用frames[number]使用JavaScript从.aspx文件中获取iframe