Безопасный способ передачи информации с одного домена на другой
Как известно, при работе с фреймами для обеспечения безопасности браузеры не позволяют 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.

ffsdmad
27 Дек, 2009
у тебя ХГМ