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

How can I implement the pop out functionality of chat windows in GMail?

本文关键字:窗口 功能 聊天 实现 GMail      更新时间:2023-09-26

我不是在寻找一个完整的实现,我更感兴趣的是他们是如何实现的。我知道他们使用GWT,但我想要一个更低级的答案。天真地说,我一开始会想,当你点击弹出链接时,他们只是打开一个新窗口并将内容复制到其中。有很多原因导致效果不佳,所以我想知道是否有人知道或有想法知道他们如何做到这一点,或者如何做到。

我最近需要在应用程序中解决这个问题。我最终使用了这个很棒的小jQuery插件来完成这个任务:WindowMsg(见底部的链接)虽然我确信还有其他方法可以完成同样的任务,但这个插件确实很有效:

  • 首先使用window.open从原始窗口创建一个新的子窗口
  • 保存对window.open返回的window对象的引用
  • 您可以在子窗口中调用一个库方法,该方法为库添加一个隐藏窗体以存储数据
  • 您可以在父窗口中调用一个库方法,该方法使用window.document.forms来填充子窗口上的表单字段(该库对所有这些内容进行了抽象,因此除非查看源代码,否则您甚至不知道其中包含表单)window.documents.forms在所有主要浏览器上都能正常工作,因此这种抽象与x-browser兼容
  • 最后,子窗口使用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/

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

当然,这不会持久化,比如用户输入的文本框的内容,所以根据窗口的用途,这可能是不切实际的。。但最好还是开始尝试最简单的选择!