Безопасный способ передачи информации с одного домена на другой

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

Пример запрещенной операции

Например, у нас есть вот такая конструкция:

Страница master.com/index.html:

...
<iframe src="http://slave.com/frame.html"></iframe>
какой угодно JS, который мы пишем сами
...


Страница slave.com/frame.html:

...
какой угодно код, полностью нам подвластный
...

Не существует способа, который бы позволял JS-коду в slave.com/frame.html обратиться к данным (или запустить функцию) страницы master.com/index.html, а также наоборот.

Правда, из этого правила есть одно важное исключение: внутри slave.com/frame.html можно присваивать значение top.location и осуществлять, таким образом, редиректы окна верхнего уровня куда-то еще.

И все-таки есть хак для прямых поддоменов

Кросс-доменный обмен все же возможен, если одна страница находится на прямом поддомене другой. В этом случае необходимо провести следующие магические операции:

Страница master.com/index.html:

...
<iframe src="http://subdomain.master.com/frame.html" height="100"></iframe>
<script>
document.domain = document.domain; // да-да, это обязательно нужно, иначе не заработает
// или можно напрямую написать: document.domain = "master.com", хотя это и не так весело
</script>
...

Страница subdomain.master.com/frame.html:

...
<script>
document.domain = "master.com";
</script>
...

Т.е. мы должны в обеих страницах присвоить свойству document.domain одинаковое значение, равное «родительскому» домену. Тогда обращение внутрь (или наружу) IFRAME возможно. Еще раз подчеркиваю, что это работает только в случае, если один домен является прямым поддоменом другого (именно прямым, потому что даже abc.subdomain.master.com здесь уже не сработает).

Вопрос к хабрасообществу

Все-таки, очень хочется найти хоть какой-нибудь способ передачи информации изнутри IFRAME в родительскую страницу. Вот для чего это нужно:

Страница master.com/index.html:

...
<iframe src="http://slave.com/frame.html" height="100"></iframe>
какой угодно JS, который мы пишем сами
...

Страница slave.com/frame.html:

...
какой угодно код, полностью нам подвластный
...

Проблема: высота slave.com/frame.html может меняться, заведомо ее нельзя указать в height IFRAME. Требуется сделать так, чтобы на master.com/index.html крутился какой-то JS, который подгоняет высоту IFRAME под контент. Главная сложность — то, что контент находится на другом домене.

Есть ли какой-нибудь простой способ (без добавления серверных скриптов на master.com) передать данные из slave.com наружу, %username%? Чтобы Javascript в master.com/index.html (который, напомню, можем писать мы) имел возможность отресайзить высоту IFRAME.

Похожие записи:

You can follow any responses to this entry through the RSS 2.0 feed.