我并不是在寻找完整的实施,我更感兴趣的是他们是如何做到的。我知道他们使用 GWT,但我想要一个更底层的答案。天真地,我会首先想到当您单击弹出链接时,他们只是打开一个新窗口并将内容复制到其中。有很多原因导致效果不佳,所以我想知道是否有人知道或有关于如何做到这一点或如何完成的想法。
我最近需要在应用程序中解决这个问题。我最终使用这个很棒的小 jQuery 插件来完成这个技巧:WindowMsg(请参阅底部的链接)虽然我确信还有其他方法可以完成相同的任务,但该插件确实可以这样工作:
- 首先,使用 window.open 从原始窗口创建一个新的子窗口
- 您保存对 window.open 返回的窗口对象的引用
- 您在子窗口中调用库方法,该方法为库添加一个隐藏表单来存储数据
- 您在父窗口中调用一个库方法,该方法使用 window.document.forms 来填充子窗口上的表单字段(该库抽象了所有这些内容,因此您甚至不知道涉及到一个表单,除非您查看源代码) window.document.forms 在所有主要浏览器上的工作方式相同,因此该抽象在 x 浏览器中兼容
- 最后,子窗口使用 window.opener 引用回其父窗口,并且可以通过父窗口上的并行隐藏窗体进行通信
- 该库实现了一个方便的助手,它需要一个回调函数在每一端运行,以使回调链易于处理
根据我使用该库的经验,如果他们包含来自 JSON.org 的 JSON 2 库,那就太好了。开箱即用的 WindowMsg 只允许您在窗口之间发送字符串消息,但是通过对 JSON 2 库的一些非常简单的使用,我能够破解它以允许在窗口之间发送完整的 JSON 对象。我敢打赌,更成熟的库(例如谷歌使用的任何库)都包含这种序列化和反序列化。
我之所以把这个链接放在这里,是因为出于某种原因,Stack Overflow 格式化程序将它变成了一个没有结束标签的锚链接,我不希望我的整个帖子成为一个巨大的超链接!
窗口消息:http://www.sfpeter.com/2008/03/13/communication- Between-browser-windows-with-jquery-my-new-plugin/ http://www.sfpeter.com/2008/03/13/communication-between-browser-windows-with-jquery-my-new-plugin/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)