2014-01-14 118 views
0

我一直在試圖弄清楚這一點,我看到很多類似的問題,但並不完全是我在找什麼。單擊按鈕時關閉iframe中的iframe(父:php,child:aspx)

我有一個.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彈出?

回答

1

如果你的PHP和ASPX頁面上域,你可以這樣做:

你的PHP頁面上

有一個名爲closeIframe

從關閉按鈕的點擊的公共方法。 aspx頁面,調用方法從父母使用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); 
} 
+0

域是相同的,但該子域不是。 (例如,父母是「parent.com」,孩子是「child.parent.com」)。我會嘗試窗口消息事件。謝謝! – kabichan

+0

好的,那麼窗口消息事件應該適合你。 – Fisch

+0

我編輯了我的答案,以幫助您完成消息事件 – Fisch

0

您並不真正關閉。您可以使用Element.innerHTML = ''Element.removeChild(otherNode)更改Element.src或刪除元素。使用frames[number]從您的.aspx文件中使用JavaScript獲取iframe