Обходной путь для одной и той же проблемы с политикой происхождения

У меня проблема: у меня есть набор фреймов, состоящий из родительского фрейма, загруженного из одного домена, и содержащегося фрейма из другого домена. Содержащийся домен также устанавливает файл cookie перед загрузкой набора фреймов. Однако из-за политики «того же источника», применяемой большинством браузеров, содержащийся фрейм не будет передавать файлы cookie, если он не из того же домена, что и родительский.

К сожалению, у меня нет контроля над родительским фреймом (или его URL-адресом), а URL-адрес содержащегося фрейма фактически статичен. Таким образом, единственный способ передать информацию на содержащийся сайт — это файлы cookie.

Единственное решение, которое я придумал, — это перезагрузить содержащийся домен в родительском фрейме, но это в первую очередь сводит на нет некоторую ценность использования фреймов.

У кого-нибудь есть лучшее решение этой проблемы?


person Richard Dorman    schedule 15.07.2009    source источник


Ответы (4)


Существует несколько способов обойти политику того же происхождения, которая препятствует ваши фреймы от общения друг с другом. Если вы управляете обоими серверами, вы можете использовать файл crossdomain.xml Flash. Если вы не контролируете один из серверов или хотите использовать JavaScript, вам придется использовать «Междоменный прокси», такой как этот для java или python или php.

Cross-Site XHR — еще один вариант, но он поддерживается не всеми браузерами.

person rook    schedule 26.05.2010

Есть много способов сделать это. Вот два, которые я использовал:

  1. Пусть и родитель, и ребенок загружают скрипт из общего источника, используя тег. Скрипты, загруженные таким образом, не имеют проблем с тем же источником, и данные, которые они возвращают, становятся частью объекта документа и могут взаимодействовать с другими скриптами, загруженными документом (так работает AJAST).
  2. Создайте обратный прокси в родительском домене и загрузите фрейм через этот прокси. Для браузера кажется, что они оба обслуживаются из одного домена. Недостатком является то, что это может повлиять на кэширование и обходит любую сеть доставки контента (например, Akamai), которую вы можете использовать.
person kdgregory    schedule 15.07.2009
comment
К сожалению, я не контролирую родительский домен, только дочерний домен. - person Richard Dorman; 15.07.2009

Есть также правильный способ сделать это в HTML 5 с помощью postMessage. См. здесь: http://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage

person stefanw    schedule 15.07.2009
comment
Мне нужно поддерживать браузеры, которые могут не поддерживать HTML 5 - person Richard Dorman; 15.07.2009

Еще одна мысль по этому поводу, где вы можете использовать API междоменного обмена сообщениями для отправки сообщений из одного фрейма в другой. вот пример! Узнайте больше на здесь.

person Chathuranga    schedule 07.11.2012