GWT и сторонний междоменный JavaScript - PullRequest
1 голос
/ 02 марта 2012

В настоящее время у меня есть проект GWT, использующий модель «Действия и места», предоставленную Google. Мы интегрируемся со сторонним междоменным решением JavaScript, которое отображает JSP внешнего домена в iframe и использует транспорт window.location для уведомления нашего домена, когда пользователь завершил работу в этом JSP.

Проблема в том, что при использовании транспорта window.location система мест GWT перехватит редактирование URL и попытается перейти к несуществующему месту.

У нас есть какое-то влияние, чтобы заставить третью сторону измениться, поэтому я вижу три варианта:

  1. Поймать попавшуюся навигацию по месту и проигнорировать ее, если она содержит определенный список зарезервированных строк, которые использует этот сторонний JS.
  2. Заставьте третье лицо изменить свое решение для использования window.name (меньше рефакторинга с их стороны)
  3. Попросите третье лицо изменить свое решение на использование JSONP (больше рефакторинга с их стороны)

Есть ли способ реально достичь # 1?

РЕДАКТИРОВАТЬ Итак, я выяснил, как достичь # 1, развернув собственную версию PlaceHistoryHandler GWT и изменив метод handleHistoryToken . Вопрос в том, какое из этих трех решений является наилучшим?

1 Ответ

1 голос
/ 03 марта 2012

Мой голос будет за изменение междоменной сигнализации, если это возможно. Отображаемый в браузере URL-адрес подразумевает, что страница может быть добавлена ​​в закладки для повторной загрузки, и предоставляет способ манипулирования историей страницы. Создание другого механизма, основанного на этом, рискует тем, что пользователь сделает закладку или перейдет на страницу / место, не имеющее смысла для системы обработки маркеров истории, и может даже сигнализировать приложению, что iframe загружен, хотя на самом деле это не так.

Тем не менее, если вы на самом деле не используете историю с местами, вы могли бы также легко использовать Places + Activities с пользовательским классом, подобным PlaceHistoryHandler, который хранит стек последних мест, чтобы разрешить возврат к ним, если ваше приложение позволяет , Это не позволит использовать кнопку «Назад» в браузере, но все же позволит внутреннюю навигацию по местам.

Если это не имеет смысла (если приложению не нужен хеш-токен, поэтому оставьте его для междоменной связи), я бы проголосовал за # 2 или # 3.

...