2010年4月13日 星期二

關閉 window.open 視窗後,更新父視窗

在 IE 瀏覽器,如果使用 showModalDialog 對話視窗,關閉時,會自動更新原來的父視窗。但在 FF (FireFox)舊版 或 Chrome 則是因為不支援,而需改用 window.open 方式來取代。

使用 window.open 所開啟的子視窗,如果更新了某些資料,當子視窗關閉時,也希望同時去更新父視窗資料,有沒有簡單一點的方法呢?

我將需求用一張圖來表示:

在這張圖中,Parent 視窗一開始,會去抓 Session 的資料,如果 Session  有資料,則會顯示在畫面上。 我在 Parent 視窗點選編輯後,就會跳出 Son 視窗。接著就可以填入新的值來改變 Session 資料。當 Son 視窗關閉後,希望能夠去更新 Parent 視窗的資料。

為了完成這功能需求,需要以下二個步驟:

步驟一:攔截 Son 視窗關閉的事件

攔截視窗關閉的事件,可以在 Son 視窗的Html 標籤  <body>  裡,設定 onunload 屬性。

步驟二:讓 Parent 視窗觸發 PostBack

在 Son 視窗的 onunload 屬性,使用  window.opener.__doPostBack() 來觸發 Parent 視窗 PostBack

注意事項:

如果 Parent 頁面,.net 沒有幫你建立 __doPostBack javascript 的話,請記得要想方法讓他生出來,可以參考:__doPostBack 出不來?

完整測試程式參考:[ 點選 ]

PS:新版 FF、Chrome 已經支援 showModalDialog 語法。參考:FireFox showModalDialog() 

沒有留言:

張貼留言