2014-06-17 86 views
0

我正在開發一個新的web應用程序,有時需要加載遺留應用程序的某些部分(通過CGI)才能完成各種傳統操作。無論何時需要這樣做,我只需將舊文檔填充到臨時iframe中,直到用戶完成所需的任何操作。 (順便提一下,請記住,較新的應用程序不得允許彈出窗口,多個窗口/標籤頁等)用iframe替換彈出窗口

但是,iframe的遺留文檔有時需要使用彈出窗口。因此,我設計了一種方法來覆蓋舊版的window.open()命令,其中包含另一個iframe的模式對話框。這很好....

但我彈出的基於窗體的文檔(現在加載在模態對話框的iframe)試圖管理其狀態時,會出現我的問題。初始加載後,表單會自動提交以獲取最新的數據庫數據...在CGI響應新文檔後,用戶可以進行選擇。在選擇之後,表單再次提交給CGI,CGI將回應一個小的JavaScript,將其選擇數據注入到opener窗口。

我的第一個問題是參考opener,因爲實際上再也沒有一個(就遺傳代碼而言)。我很好,通過將我的模式iframe的contentWindow.opener定義爲我的傳統文檔的iframe窗口(我提到的第一個iframe)來解決這個問題。然而,當模態文檔的表單提交時,STATE GETS LOST和我的opener定義被重置爲null。因此,當用戶在模式的iframe中進行選擇時,遺留代碼無法通過opener引用返回任何值。

所以,我的問題是複雜的,但基本上...
有沒有辦法保存window.opener引用,使它不會丟失,只要該窗口更新?我知道JavaScript/DOM是一種「通過引用傳遞」,但我擔心我現在在過度設計或什麼東西。

任何想法?提示?
任何人都可以做類似的事情嗎?

+0

iframes有一個'onload'事件。您是否嘗試在此處重新注入假開罐器對象? –

+0

@DarkFalcon,這正是我所希望的......有人幫助我從樹上看到森林。我完全忽略了在iframe上監聽的可能性,而是將注意力集中在iframe.contentWindow上......一個快速控制檯測試表明它可能工作〜或者至少幫助我進一步移動。先生,我先謝謝你。 – csr19us

回答

0

這裏是我做過什麼?
從本質上講,我訂閱的onload處理程序,設置opener每當事件觸發(每個表單提交)。現在

myiframe.onload = function(){ 
    myiframe.contentWindow.opener = objWindow_mySavedOpenerReference; 
    }; 

,每次狀態變化時,iframe復位處理在iframe的窗口中首戰參考...用那一套,這依賴於opener參考現在將工作的任何邏輯。 - 感謝@DarkFalcon尋求幫助。