Кросс-платформенный обмен данными между страницей и IFRAME (один домен) - PullRequest
4 голосов
/ 08 марта 2010

Для специализированной цели с Aweber, касающейся подписки на рассылку новостей, у меня есть страница, загружающая вложенный IFRAME внутри, и оба находятся в одном домене. (Во многих других сообщениях stackoverflow говорится о разных доменах, но этот вопрос касается только одного и того же домена.) Мне нужен кросс-платформенный способ (включая браузеры, такие старые, как на заре IE6), чтобы они могли общаться.

Например, кто-то заполняет имя и адрес электронной почты и щелкает флажок, а скрытый IFRAME рядом с флажком находится в цикле setInterval (), следя за этим. Когда он получает уведомление, он захватывает имя и адрес электронной почты и отправляет сообщение.

Сначала я подумал, что я могу просто удалить cookie на родительской странице, а затем потомок IFRAME может сидеть в промежутке времени, наблюдая за этим cookie. Но мои тесты показывают, что это не сработает. Файл cookie создается, но IFRAME его не видит. Итак, я попробовал метод мета-обновления в IFRAME, и снова по какой-то причине он не смог увидеть этот cookie.

Единственное решение, которое я могу придумать, состоит в том, что родительская страница будет нажимать кнопку-флажок (мы используем jQuery) и отправлять данные AJAX на сервер в базу данных. Затем IFRAME может проверить интервал обратно на сервер через AJAX, чтобы увидеть, изменилось ли значение базы данных, и отреагировать на него, если это так. Но это похоже на чрезмерно спроектированное решение, и я ищу более простую альтернативу, которая работает кроссплатформенно, даже в более ранних браузерах, начиная с периода IE6 и выше.

1 Ответ

4 голосов
/ 08 марта 2010

Это гораздо проще: в iframe вы можете получить доступ к переменной parent, которая содержит родительское окно. Таким образом, вы можете использовать parent.document, чтобы найти форму, прочитать значения и т. Д.

...