Есть код, который вставляется на рекламной площадке и размещается на других сайтах в определенных iframe блоках. Стоит задача из iframe на этих рекламных сайтах как то вывести JS вне iframe окна, а на самом сайте top window. Возможно ли это каким то способом? И какие есть решения?
Это можно сделать легальным путем. Сначала техническая информация о терминологии:
Cross-Origin Resource Sharing (CORS) - механизм, использующий дополнительные HTTP-заголовки, чтобы дать возможность агенту пользователя получать разрешения на доступ к выбранным ресурсам с сервера на источнике (домене), отличном от того, что сайт использует в данный момент. Говорят, что агент пользователя делает запрос с другого источника (cross-origin HTTP request), если источник текущего документа отличается от запрашиваемого ресурса доменом, протоколом или портом. Более подробно: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Access-Control-Allow-Origin - специальный HTTP заголовок с помощью которого сервер разрешает кросс-доменный запрос с этого домена. Только при наличии такого заголовка в ответе – браузер сочтёт запрос успешным, а иначе JavaScript получит ошибку. Более подробно: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
Window.postMessage() - метод позволяет безопасно отправлять кросдоменные запросы. При вызове метода он вызвает MessageEvent для отправки в целевом окне когда завершается любой ожидающий сценарий который должен быть выполнен (например оставшиеся обработчики событий если window.postMessage() вызывается из обработчика событий ранее заданных ожидающих таймаутов). Более подробно https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
На основе этой информации есть только один легальный способ реализовать поставленую задачу:
сайт на котором отображается рекламный iframe должен отправить Access-Control-Allow-Origin заголовок с корректными данными браузеру.
сайт на котором отображается рекламный iframe должен иметь обработчик событий, который выполнит колбек функцию с iframe.
рекламный блок с iframe должен отсылать postMessage() родительскому сайту.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Каким образом на ютубе реализована такая предзагрузка? Сложно ли такое сделать?
Данный вопрос является точным дубликатом: