如何在GMail中实现聊天窗口的弹出功能?

时间:2008-10-04 06:21:20

标签: javascript

我不是在寻找一个完整的实现,我对他们是如何做到这一点更感兴趣。我知道他们使用GWT,但我想要一个更低级别的答案。天真的,我会先想到当你点击弹出窗口链接时,他们只需打开一个新窗口并将内容复制到其中。有很多理由说明为什么这样做不会很好,所以我想知道是否有人知道或者有关于他们如何做到这一点或如何做到的想法。

2 个答案:

答案 0 :(得分:12)

我最近需要在应用中解决这个问题。我最终使用这个很棒的小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/

答案 1 :(得分:1)

我认为最简单的方法是将数据存储在服务器上(您可能已经存在),然后让新窗口检索该数据。

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