在 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()
2010年4月13日 星期二
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言