Pull to refresh

Chrome HabraMail Extension (и favicon method)

Reading time2 min
Views1.1K
В продолжение темы.

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

Знакомьтесь — ваш друг, HabraMail!

Это, пока что, beta версия (много чего предстоит доработать), но начать пользоваться ей можно уже сейчас.

UPD: Исходный код

Остальное под катом:

Описание



После установки, на любой странице хабра, в правом нижнем углу будет отображаться его иконочка.
image
Щелкаем по ней и выезжает небольшое окошко с последними сообщениями в нашем «хабраящике».
image
Нажимаем на тему сообщения, и плавненько, без перезагрузок, получаем окошко с нашим сообщением.
image
Жмем на надпись «написать» или на имя автора(слева от темы сообщения), и появляется форма нового сообщения.
image
В форме просмотра, кстати говоря, можно еще и удалять сообщение.

Техническая реализация


Как только я начал писать это расширение — сразу столкнулся со следующего рода проблемой: хоть chrome extensions и могут отправлять кросс-доменные запросы, но при этом в заголовке запроса будет ставиться свойство «Origin», равное url'у страницы, с которой он отправляется.

Все бы ничего, да сервер хабрахабра отказывается принимать запросы с отличным от нужного Orgin.

И тут приходит на помощь favicon метод, о котором я вам и расскажу (вполне вероятно, что я не первый, кто до этого додумался).

Favicon метод


И решил я делать кросс-доменный запрос используя iframe (content scripts подключаются ведь и туда тоже). Но вот беда — самая маленькая страница, которую я смог найти (искал я, правда, недолго) — это «ошибка 404». Конечно же, меня это не устроило, и я начал искать «альтернативное» решение.

Случайно заметил, что расширение может подключаться даже на страницу, где кроме картинки нет и вовсе ничего (например,http://example.com/example.png).

Напомню, что задача была в том, чтобы отправить запрос с домена username1.habrahabr.ru(или просто habrahabr.ru) на домен username2.habrahabr.ru.

И, используя «находку с картинкой», в моем расширении, я решил её следующим образом: вместо иконки ставим iframe без border с фиксированной шириной и высотой, в котором загружается следующий url: http://username2.habrahabr.ru/favicon.ico. В этот iframe вставляется content script, который общается с основной страницей (username1.habrahabr.ru) через расширение (используя chrome.extension.connect). Скрипт на основной странице посылает запрос к расширению, оно посылает в iframe, а он назад, и расширение возвращает ответ скрипту.

Вот такой вот получился метод отправки cross-origin запросов в chrome extensions.

С нетерпением жду отзывов и предложений!
Tags:
Hubs:
Total votes 66: ↑55 and ↓11+44
Comments25

Articles