Как стать автором
Обновить

MapChat

Время на прочтение2 мин
Количество просмотров1.5K
Новогодние праздники прошли, у многих некоторых из нас наступили долгожданные новогодние дни отдыха. Пользуясь вашим свободным временем, хочу рассказать о проекте, которым я занимался последний месяц.



MapChat — это сервис для общения людей, в котором комнаты с сообщениями отображаются как точки на карте. Вы можете создавать новые точки, дописывать сообщения в уже созданные, делиться видео/аудио/фотографиями с друзьями где угодно!

Возможности:

обсуждение прошедших событий, встреч, концертов;
  • изучение иностранных языков посредством разговора с коренным населением;
  • гео-таргетированные игры, головоломки и квесты;
  • знакомства, поиск друзей.


Технологии:

MapChat сделан используя CouchApp (J Chris Anderson, спасибо тебе!) и GeoCouch (спасибо CouchOne за предоставление бесплатного хостинга и Volker Mische за реализацию) и полностью живет в CouchDB без использования каких-либо других back-end'ов. Такая структура приложения позволяет запускать его локально, пользоваться им без всяческих задержек и вне зависимости от подключения к сети интернет. В данный момент ведется разработка Android приложения (используя CouchDB для Android от CouchOne и PhoneGap). Так же используется сторонний сервис embed.ly для автоматического включения интерактивных элементов в общение пользователей (youtube, twitpic, soundcloud и т.п.). Embed.ly предоставляет JSONP API, но так как во время создания сайта, я старался следовать максимально жесткой политики безопасности — использование этого сервиса потребовало разработки JSONP и Embed Sandboxing методики.

JSONP и EMBED Sandboxing.

Как правило, при использовании стороннего контента (страниц/скриптов/embed элементов) разработчики сайтов прибегают к технике cookie-less domains, вставляя на страницу iframe указывающие на другой домен (конечно же, принадлежащий этому сайту). Таким образом содержимое iframe будет лишено доступа к главному окну и cookie сайта.
К сожалению, так как я разрабатывал распределенное приложение — реализация cookie-less domain была невозможна. (Каждый пользователь может запустить сайт у себя локально, а cookie-less domain является привязкой к какому-то определенному доменному имени). Поэтому пришлось разработать следующую нехитрую технику:

  1. Возьмем html-контент (foreign_html_content) со стороннего сайта, который мы хотим отобразить.
  2. Сгенерируем url следующего вида "data:text/html;charset=utf-8;plain," + foreign_html_content. Как видно, этот url есть ничто иное, как data url реализованый во всех современных браузерах
  3. Вставляем в страницу iframe с src равным этому url'у.
  4. Все готово!


Получившийся iframe не будет иметь доступа к родительскому окну и не сможет прочитать/записать cookie для главного домена.

JSONP Sandboxing реализуется практически также, за исключением того, что используется postMessage метод (который опять таки доступен в большинстве браузеров). В Iframe вставляется javascript callback функция, которая вызовет postMessage, и тэг script указывающий на jsonp url с callback равным имени этой функции. А дальше все просто, родительское окно добавляет этот iframe и устанавливает listener на событие message. Полученное сообщение и есть результат JSONP запроса.

В завершении статьи хочу напомнить ссылку сайта. (Пользователям Google Chrome я рекомендую поставить приложение из Webstore).

P.S.
Желающие поучаствовать в разработке или помочь проекту могут написать мне в личку или послать письмо на fedor@indutny.com
Теги:
Хабы:
Всего голосов 32: ↑31 и ↓1+30
Комментарии27

Публикации