2008-10-04 15 views
8

No estoy buscando una implementación completa, estoy más interesado en cómo lo hacen. Sé que usan GWT, pero me gustaría una respuesta de bajo nivel. Ingenuamente, comenzaría por pensar que al hacer clic en el enlace emergente, simplemente abren una nueva ventana y copian contenido en ella. Hay muchas razones por las que no funcionará bien, así que me pregunto si alguien sabe o tiene ideas sobre cómo lo hacen o cómo se podría hacer.¿Cómo puedo implementar la funcionalidad emergente de las ventanas de chat en GMail?

Respuesta

12

Recientemente tuve que resolver exactamente este problema en una aplicación. Terminé usando este pequeño gran plugin de jQuery para hacer el truco: WindowMsg (ver el enlace al final) Aunque estoy seguro de que hay otras maneras de lograr la misma tarea, que plugin no funciona de esta manera:

  • primero se cree una nueva ventana secundaria desde su ventana original usando window.open
  • guarda una referencia al objeto ventana devuelto por window.open
  • llama a un método de biblioteca en la ventana secundaria que agrega un formulario oculto para la biblioteca a almacenar datos en
  • llama a un método de biblioteca en la ventana primaria que usa window.document.forms para rellenar campos de formulario en el hijo dow (la biblioteca abstrae todas estas cosas para que no sepas que hay un formulario involucrado a menos que mires la fuente) window.document.forms funciona igual en todos los navegadores principales, por lo que esta abstracción en x-browser es compatible
  • finalmente, la ventana secundaria hace referencia a su ventana padre usando window.opener y puede comunicarse a través de un formulario oculto paralelo en el padre
  • la biblioteca implementa un asistente conveniente que lleva una función de devolución de llamada para ejecutar en cada lado cadena de devolución de llamada fácil de tratar

En mi experiencia trabajando con la biblioteca, también habría sido bastante agradable si hubieran incluido JSON 2 lib de JSON.org. Fuera de la caja, WindowMsg solo le permite enviar mensajes de cadena entre ventanas, pero con un uso bastante simple de JSON 2 lib, pude hackearlo para permitir el envío de objetos JSON completos entre ventanas. Apuesto a que las bibliotecas más maduras (como las que utiliza Google) incluyen ese tipo de serialización y deserialización incorporada.

Pongo este enlace aquí porque, por alguna razón, el formateador Stack Overflow lo convierte en un enlace de anclaje con ¡No hay etiqueta de cierre y no quiero que toda mi publicación sea un hipervínculo gigante!

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

+0

No había oído hablar de WindowMsg antes, debe verlo, ¡salud! – ConroyP

+0

Desafortunadamente, el enlace para ** WindowMsg ** está roto: ¿tiene otro, o puede agregar un pequeño ejemplo a su respuesta? (es decir, una muestra de código) – Matt

1

Yo diría que la forma más fácil sería tener los datos almacenados en el servidor (que probablemente ya lo hacen), entonces simplemente tener la nueva ventana de recuperar esos datos.

Por supuesto que no persistirían cosas como el contenido de un cuadro de texto que el usuario ha ingresado, así que dependiendo de para qué sirve la ventana, puede ser impráctico ... ¡pero siempre es mejor comenzar a probar la opción más simple!

Cuestiones relacionadas