Как реализовать функцию всплывающих окон в чате в GMail? - PullRequest
8 голосов
/ 04 октября 2008

Я не ищу полной реализации, меня больше интересует, как они это делают. Я знаю, что они используют GWT, но я бы хотел получить ответ более низкого уровня. Наивно, я бы начал думать, что когда вы щелкаете по всплывающей ссылке, они просто открывают новое окно и копируют в него содержимое. Есть много причин, почему это не сработает, поэтому мне интересно, знает ли кто-нибудь или есть идеи о том, как они это делают или как это можно сделать.

Ответы [ 2 ]

12 голосов
/ 04 октября 2008

Мне недавно нужно было решить именно эту проблему в приложении. Я закончил тем, что использовал этот замечательный маленький плагин jQuery, чтобы сделать свое дело: WindowMsg (см. Ссылку внизу). Хотя я уверен, что есть другие способы выполнить ту же задачу, этот плагин работает следующим образом:

  • сначала вы создаете новое дочернее окно из исходного окна, используя window.open
  • Вы сохраняете ссылку на объект окна, возвращенный window.open
  • вы вызываете метод библиотеки в дочернем окне, которое добавляет скрытую форму для библиотеки для хранения данных в
  • вы вызываете метод библиотеки в родительском окне, которое использует window.document.forms для заполнения полей формы в дочернем окне (библиотека абстрагирует все эти вещи, так что вы даже не узнаете, что была задействована форма, если вы не посмотрели в исходном коде) window.document.forms работает одинаково во всех основных браузерах, поэтому эта абстракция в x-browser совместима
  • наконец, дочернее окно обращается к своему родительскому окну, используя window.opener, и может общаться через параллельную скрытую форму на родительском
  • библиотека реализует удобный помощник, который принимает функцию обратного вызова для запуска на каждой стороне, чтобы упростить работу с цепочкой обратного вызова

По моему опыту работы с библиотекой было бы также неплохо, если бы они включили библиотеку JSON 2 из JSON.org. Из коробки 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 голос
/ 04 октября 2008

Я бы сказал, что самым простым способом было бы сохранить данные на сервере (что вы, вероятно, уже делаете), а затем просто открыть новое окно, чтобы получить эти данные.

Конечно, это не сохранит такие вещи, как содержимое текстового поля, введенного пользователем, поэтому в зависимости от того, для чего предназначено окно, это может быть нецелесообразно ... но всегда лучше начинать пробовать самый простой вариант!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...