我不是在寻找一个完整的实现,我对他们如何做到这一点更感兴趣.我知道他们使用GWT,但我想要一个更低级别的答案.天真的,我会先想到当你点击弹出窗口链接时,他们只需打开一个新窗口并将内容复制到其中.有很多理由说明为什么这样做不会很好,所以我想知道是否有人知道或有想法如何做到这一点或如何做到这一点.
我最近需要在应用程序中解决这个问题.我最终使用这个伟大的小jQuery插件来做技巧:WindowMsg(见底部的链接)虽然我确定还有其他方法可以完成相同的任务,但该插件确实有效:
首先使用window.open从原始窗口创建一个新的子窗口
保存对window.open返回的窗口对象的引用
您在子窗口中调用库方法,为库添加隐藏表单以存储数据
你在父窗口中调用一个库方法,该窗口使用window.document.forms来填充子窗口上的表单字段(该库抽象所有这些东西,所以除非你查看源代码,否则你甚至不知道有涉及的表单)window.document.forms在所有主流浏览器上的工作方式相同,因此这种抽象在x-browser兼容
最后,子窗口使用window.opener返回其父窗口,并可以通过父窗口上的并行隐藏窗体进行回传
该库实现了一个方便的帮助器,它在每一侧运行一个回调函数,使回调链易于处理
根据我使用库的经验,如果他们从JSON.org中包含了JSON 2库,那将会非常好.开箱即用,WindowMsg只允许您在窗口之间发送字符串消息,但是通过一些非常简单的使用JSON 2库,我能够破解它以允许在窗口之间发送完整的JSON对象.我敢打赌,更成熟的库(比如google使用的那些)包含了那种序列化和反序列化.
我在这里放置此链接是因为出于某种原因,Stack Overflow格式化程序将其转换为没有结束标记的锚链接,我不希望我的整个帖子成为一个巨大的超链接!
WindowMsg:http://www.sfpeter.com/2008/03/13/communication-between-browser-windows-with-jquery-my-new-plugin/