我正在開發一個新的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是一種「通過引用傳遞」,但我擔心我現在在過度設計或什麼東西。
任何想法?提示?
任何人都可以做類似的事情嗎?
iframes有一個'onload'事件。您是否嘗試在此處重新注入假開罐器對象? –
@DarkFalcon,這正是我所希望的......有人幫助我從樹上看到森林。我完全忽略了在iframe上監聽的可能性,而是將注意力集中在iframe.contentWindow上......一個快速控制檯測試表明它可能工作〜或者至少幫助我進一步移動。先生,我先謝謝你。 – csr19us