用iframe替换弹出窗口

时间:2014-06-17 18:10:38

标签: javascript forms dom iframe window

我正在开发一个更新的Web应用程序,有时需要加载遗留应用程序的一部分(通过CGI)以完成各种遗留操作。每当需要发生这种情况时,我只需将旧文档填充到临时iframe中,直到用户完成所需的任何操作。 (顺便说一句,请记住,较新的应用程序不得允许弹出窗口,多个窗口/标签等)

但是,有时,iframe的遗留文档想要使用弹出窗口。所以,我设计了一种方法,用一种包含另一个iframe的模态对话框来覆盖遗留的window.open()命令。这很有效....

但是,只要弹出窗口的基于表单的文档(现在加载到模态对话框的iframe中)尝试管理其状态,我就会出现问题。在初始加载时,其表单自动提交以获取最新的DB数据......在CGI用新文档响应之后,用户可以进行选择。选择后,表单再次提交给CGI,CGI使用一个小的JavaScript响应,将其选择数据注入opener窗口。

我的第一个问题是opener的引用,因为实际上已经不存在了(就遗留代码而言)。通过将我的模态iframe的contentWindow.opener定义为我的遗留文档的iframe窗口(我提到的第一个iframe),我已经解决了这个问题。

但是,当模态文档的表单提交时,STATE GETS LOST和我的opener定义重置为null。因此,当用户在模态的iframe中进行选择时,遗留代码无法通过opener引用返回任何值。

所以,我的问题很复杂,但基本上...... 有没有办法保存window.opener引用,以便在窗口更新时不会丢失?我知道JavaScript / DOM是一种“通过引用传递”,但我担心我在这一点或其他方面过度工程。

有什么想法吗?提示?
有人做过类似的事吗?

1 个答案:

答案 0 :(得分:0)

这是我做的...... 本质上,我订阅了一个onload处理程序,只要该事件触发(每个表单提交),就会设置opener

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

现在,每次状态更改时,iframe都会处理在iframe的窗口中重置开启者引用...使用该集合,依赖于opener引用的任何逻辑现在都可以工作。 - 感谢@DarkFalcon寻求帮助。