Как я могу реализовать всплывающие окна чата в GMail?

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
2 481
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

  • сначала вы создаете новое дочернее окно из исходного окна, используя window.open
  • вы сохраняете ссылку на объект окна, возвращаемый window.open
  • вы вызываете библиотечный метод в дочернем окне, который добавляет скрытую форму для библиотеки для хранения данных в
  • вы вызываете библиотечный метод в родительском окне, который использует window.document.forms для заполнения полей формы в дочернем окне (библиотека абстрагирует все эти вещи, поэтому вы даже не узнаете, что была задействована форма, если вы не посмотрели на источник ) window.document.forms работает одинаково во всех основных браузерах, поэтому эта абстракция в x-браузере совместима
  • наконец, дочернее окно обращается к своему родительскому окну с помощью 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/

К сожалению, ссылка на WindowMsg не работает - у вас есть еще одна или вы можете добавить к своему ответу небольшой пример? (т.е. образец кода)

Matt 26.10.2017 17:48

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

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

Другие вопросы по теме