2013-07-19 3 views
0

Я пытаюсь внедрить iframe в https-сайт. Встраиваемый сайт может использовать только протокол http.Перекрестный домен/протокол iframe с доступом к обоим серверам и современным функциям

Я получаю консольную ошибку, что кадр заблокирован, потому что «Запрос доступа к кадру имеет протокол« https », к кадру, к которому обращаются, имеет протокол« http ». Протоколы должны соответствовать«.

После того, как у меня работает рама, я хочу запустить код на внедренном сайте. Я думаю, что использование структуры postMessage должно сделать это для меня, но я не хочу, чтобы код, который принимает эти сообщения на встроенной странице, всегда включался, поэтому вы хотите использовать Javascript на родительском сайте для ввода JS-файла. Пытаясь использовать contentDocument, но получая ошибку, это значение равно null.

Нет необходимости поддерживать старые браузеры, поэтому все новые материалы HTML5 в порядке, если IE10/Chrome/Safari/Firefox будут запускать его. У меня есть полный доступ к обоим серверам, поэтому редактирование заголовков PHP/Apache в порядке.

ответ

0

Чтобы ответить на мой собственный вопрос, после нескольких часов работы выяснится, что не будет возможности вставлять JS-файл, если родительский https, а child - http.

Однако, как только я отказался от этой мечты, это было очень легко!

Перед загрузкой iframe я делаю запрос CORS AJAX с сайта A на сайт, который я хочу отобразить в iframe (веб-сайт B), в файл PHP, который проверяет значение HTTP_ORIGIN, чтобы убедиться, что правильный сервер обращается к нему , Если это так, он устанавливает переменную сеанса на веб-сайте B. Затем, когда я загружаю веб-сайт B с сайта A в iframe, он использует значение сеанса, чтобы знать, что это нормально, чтобы включить файл javascript, который я собирался ввести на веб-сайт B.

После этого материал postMessage работал отлично по различным протоколам без дополнительной работы!

+0

Ох. И если кто-то сталкивается с этим, возможно, им будет полезно помнить, что вы должны установить xhrFields.withCredentials в true в вашем запросе JQuery AJAX и в заголовке Access-Control-Allow-Credentials значение true в вашем скрипте PHP. –

Смежные вопросы