【问题标题】:Close iframe within iframe (parent:php, child:aspx) when a button is clicked单击按钮时关闭 iframe(父:php,子:aspx)内的 iframe
【发布时间】:2014-01-14 23:33:55
【问题描述】:

我一直试图弄清楚这一点,我看到了许多类似的问题,但不完全是我想要的。

我有一个.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()");

它什么也没做。没有错误,也不会关闭。

我一直在试图弄清楚如何在 parent 中调用该方法,但我仍然无法弄清楚。

如何从 child.aspx 关闭模态 iframe 弹出窗口??

【问题讨论】:

    标签: javascript php asp.net iframe


    【解决方案1】:

    如果您的 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);
    }
    

    【讨论】:

    • 域相同但子域不同。 (例如,父母是parent.com,孩子是child.parent.com)。我会尝试窗口消息事件。谢谢!
    • 好的,那么窗口消息事件应该非常适合您。
    • 我编辑了我的答案以帮助您处理消息事件
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2014-12-25
      • 2014-12-28
      • 2017-10-07
      相关资源
      最近更新 更多