Преодоление кросс-доменности в iframe

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

Все это связано с мерами безопасности и т.п. чепухи. :). Для преодоления данных ограничений я использую обмен сообщениями между фреймами. Особенности данного подхода мы и рассмотрим в данной статье.

Допустим, у вас есть родительское окно с фреймом.

Отправка данных из фрейма в родительское окно.

Упакуйте нужные данные в объект и отправьте их window.parent.

Теперь данные нужно как то поймать в родительском окне.

Получение сообщения от фрейма в родительском окне.

Суть стоит в добавлении обработчика события ‘message’. В нем нас будет интересовать параметр event.originalEvent.data — с отправленными нам данными.

Для сокращения синтаксиса, воспользуюсь jQuery:

Как видите, пока все очень просто.

Теперь рассмотрим что делать, если нам понадобится отправить сообщение (к примеру, результат обработки данных) обратно в дочерний фрейм?

Рассылка сообщений по дочерним фреймам.

Первая проблема — мы не знаем откуда (из какого фрейма) пришло сообщение. Вторая состоит в том, что и другие под-программы вашего сайта (3d part скрипты, сервисы сбора статистики) могут отправлять сообщения, и ваш обработчик будет их также перехватывать. Это вам предстоит учесть самим.

Как решить первую проблему?

В пакет с данными можно добавить какой то идентификатор, по которому определять откуда отправлен запрос. Это один из вариантов.

Второй вариант состоит в том, чтобы разослать ответное сообщение всем дочерним фреймам, а те уже сами разберутся, что им делать с пакетом данных.

Нужно учесть, что :

  • Некоторые сообщения могут не требовать ответа,
  • Запросы могут иметь разное назначение и т.д.

Предлагаю взглянуть на следующий прототип API обмена сообщениями.

В родительском окне размещаем скрипт такого вида:

На стороне iframe придется организовать обработку события message аналогично как и на стороне родительского окна.

А при отправке запросов надо указывать коды операции:

Мало букафф? Читайте есчо !

Виджетик для сравнения двух картинок

Ноябрь 1, 2015 г.

Этот виджет может найти применение для сайта дизайнера или фотографа, которые занимаются реставрацией или обработкой изображений. Наверное, приложений ...

Читать

Как получить кол-во слайдов в slick слайдере

Апрель 9, 2024 г.

Слайдер классный, а вот документация какая то вялая. Сначала нужно найти DOM элемент, куда подключен slick, а потом получить объект слайдера, в котором можно прочитать множество свойств, в том числе и число слайдов: [crayon-69935e80354cf627294180/]

Читать

Определение версии браузера - PHP или javascript?

Май 17, 2011 г.

Хорошо если ваш сайт работает во всех, или почти во всех браузерах так, как вы того хотите. Все меняется, выходят новые версии, появляются новые возможности, и глупо их не использовать, в угоду "старичкам". Года 1,5 назад IE 6.0 (судя по статистике посещений ...

Читать

Работа с html select в режиме multiple, отличия от обычного режима

Июнь 9, 2017 г.

HTML select с флагом multiple позволяет сделать выбор нескольких значений. В этой статье мы рассмотрим как правильно обработать данные, используя javascript ...

Читать
 

Комментарии к «Преодоление кросс-доменности в iframe»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: