如何在GMail中实现聊天窗口的弹出功能
How can I implement the pop out functionality of chat windows in GMail?
我不是在寻找一个完整的实现,我更感兴趣的是他们是如何实现的。我知道他们使用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/
我认为最简单的方法是将数据存储在服务器上(您可能已经这样做了),然后让新窗口检索数据。
当然,这不会持久化,比如用户输入的文本框的内容,所以根据窗口的用途,这可能是不切实际的。。但最好还是开始尝试最简单的选择!
- 按下一个HTML按钮,该按钮使用一个功能在同一个新窗口中打开URL
- 如何在 mvc3 中显示弹出窗口时限制页面的功能
- 添加标记和点击功能以显示信息窗口
- 具有双重功能的按钮:在_blank窗口中打开一个链接,再加上_self中的另一个链接
- 无法在指令内的弹出窗口中触发联机功能
- 点击功能打开新窗口并计算点击次数
- 使用Window_handles在位置弹出窗口中单击按钮,并带有守夜功能
- 当滚动$(窗口)时,角度控制器未触发滚动功能
- 在没有额外功能的所有现代浏览器中居中显示JavaScript窗口
- jQuery:窗口大小调整功能问题
- Cke对话框窗口增加了简单的功能
- 如果未提交表单,则在卸载之前运行窗口功能
- 窗口加载功能无法停止
- 设置超时功能在 chrome 扩展程序弹出窗口.js问题
- Javascript:选择窗口加载功能
- 浏览器窗口大小调整的 JavaScript 功能
- 为剑道UI窗口添加全局功能
- Chrome扩展-使用当前tab's窗口功能从后台
- 高级弹出窗口功能
- 如何启用引导弹出窗口功能