【发布时间】:2014-06-17 18:10:37
【问题描述】:
我正在开发一个较新的 Web 应用程序,有时需要加载旧应用程序的一部分(通过 CGI)才能完成各种旧有操作。每当需要发生这种情况时,我只需将遗留文档填充到临时 iframe 中,直到用户完成所需的任何操作。 (顺便说一句,请记住,较新的应用不得允许弹出窗口、多个窗口/选项卡等)
但是,有时,iframe 的旧文档想要使用弹出窗口。因此,我设计了一种方法来使用包含另一个 iframe 的模式对话框来覆盖旧版的 window.open() 命令。这很好用....
但每当弹出窗口的基于表单的文档(现在已加载到模式对话框的 iframe 中) 尝试管理其状态时,我的问题就会出现。在初始加载时,它的表单会自动提交以获取最新的数据库数据……在 CGI 以新文档响应后,用户可以进行选择。选择后,表单再次提交给 CGI,CGI 以一个小的 JavaScript 响应,将其选择数据注入opener 窗口。
我的第一个问题是对opener 的引用,因为实际上不再存在(就遗留代码而言)。我通过将模态 iframe 的 contentWindow.opener 定义为我的旧文档的 iframe 窗口(我提到的第一个 iframe)解决了这个问题。
但是,当模态文档的表单提交时,状态丢失并且我的opener 定义被重置为null。因此,当用户在 modal 的 iframe 中进行选择时,旧代码无法通过 opener 引用返回任何值。
所以,我的问题很复杂,但基本上......
有没有办法保存 window.opener 引用,以便在该窗口更新时它不会丢失?我知道 JavaScript/DOM 是一种“通过引用传递”,但我担心我在这一点上过度设计了。
有什么想法吗?提示?
有人做过类似的事情吗?
【问题讨论】:
-
iframe 有一个
onload事件。此时您是否尝试重新注入虚假的开启器对象? -
@DarkFalcon,这正是我所希望的……有人帮我从树上看森林。我完全忽略了收听
iframe的可能性,而是专注于iframe.contentWindow... 快速控制台测试表明它可能有效〜或者至少帮助我更进一步。先生,我先谢谢你了。
标签: javascript forms dom iframe window