17 March 2010

Кроссдоменный AJAX на основе CSS

Lumber room
Недавно столкнулся с проблемой как передать данные с сервера A в
javascript на сервер B, если на сервере B серверный код писать нельзя,
а на А можно.
И нашел элегантное решение.
Суть решения в том, что для использования предлагается объект
CSSHttpRequest, предоставляющий выполнять AJAX-запросы на базе CSS. Это
работает, поскольку CSS не имеет ограничений безопасности, которые имеет
стандартный объект XMLHttpRequest.
В отличие от JSONP имеет ограничение только на GET-запросы. Также есть некоторые проблемы совместимости с браузерами
Код выглядит следующим образом.
CSSHttpRequest.get(<br> "http://www.nb.io/hacks/csshttprequest/hello-world/",<br> function(response) { alert(response); }<br> );

Данные кодируются на сервере в виде 2-х килобайтных цепочек. Ответ
возвращается в в виде:
 #c0 { background: url(data:,Hello%20World!); }<br> #c1 { background: url(data:,I’m%20text%20encoded%20in%20CSS!); }<br> #c2 { background: url(data:,I%20like%20arts%20and%20crafts.); }

На сервере B с помощью javascript создается невидимый IFRAME, в который
и загружается CSS.
Это также работает и в XHTML.

Данное решение совместимо с IE6+, Firefox 2+, Safari 3+, iPhone.
Вид лицензии: Apache License
Tags:CSSajaxcrossdomain
Hubs: Lumber room
+23
1.2k 28
Comments 14
Top of the last 24 hours