2008-10-04 105 views
8

我不是在寻找一个完整的实现,我更关心他们是如何做到的。我知道他们使用GWT,但我想要更低层次的答案。天真地,我会开始思考,当你点击弹出链接时,他们只需打开一个新窗口并将内容复制到其中。有很多理由不能很好地解决问题,所以我想知道是否有人知道他们是如何做到这一点或者如何做到的。如何在GMail中实现聊天窗口的弹出功能?

回答

12

我最近需要准确地解决在应用这个问题。最后我用这个伟大的小jQuery插件做的伎俩:WindowMsg(见文末链接)虽然我敢肯定还有其他的方法来完成相同的任务,即插件不正是如此工作:

  • 首先你使用window.open
  • 您保存对window.open返回的窗口对象的引用
  • 您在子窗口中调用库方法,该方法为库添加隐藏窗体在
  • 存储数据调用在使用window.document.forms填充的孩子赢表单字段的父窗口库方法陶氏(库抽象所有的这些东西,所以你甚至不知道有参与,除非你在查看源形式)window.document.forms的工作原理相同的所有主要浏览器,因此这个抽象的X浏览器兼容
  • 最后,子窗口是指回到它的父窗口中使用window.opener,并且可以通过并行隐藏表单上家长
  • 库实现了一个方便的助手,需要一个回调函数,在每个方运行,使传送回回调链容易处理

根据我的经验与图书馆合作,如果他们已经包含来自JSON.org的JSON 2 lib,它也会相当不错。开箱即用,WindowMsg只允许你在窗口之间发送字符串消息,但是通过一些非常简单的JSON 2 lib的使用,我能够破解它以允许在窗口之间发送完整的JSON对象。我敢打赌,更多成熟的库(比如谷歌使用的那种)包括那种序列化和反序列化。

我在这里放这个链接是因为某些原因,堆栈溢出格式化程序将它变成一个锚链接没有结束标签,我不希望我的整个帖子成为一个巨大的超链接!

WindowMsg: http://www.sfpeter.com/2008/03/13/communication-between-browser-windows-with-jquery-my-new-plugin/

+0

没有听说过WindowMsg之前,一定要检查出来,干杯! – ConroyP 2008-10-04 08:17:56

1

我想说的最简单的方法是将有存储在服务器上的数据(你可能做的话),那么就必须在新窗口中检索数据。

当然,这不会像用户输入的文本框内容那样持久,所以根据窗口的用途,这可能是不切实际的......但最好开始尝试最简单的选项!