Могут ли заголовки Cross-Origin Resource Sharing разрешить доступ к X-Domain IFRAME? - PullRequest
9 голосов
/ 24 июня 2011

Настройка высоты IFRAME в соответствии с высотой страницы содержимого может быть настоящим перетаскиванием , если страницы с содержимым и содержимым не принадлежат одному домену.

Выполните перекрестное происхождениеЗаголовки общего доступа к ресурсам (CORS) позволяют странице содержимого разрешать междоменный доступ к своим ресурсам и, таким образом, позволяют содержащейся странице читать ее высоту?(или, в качестве альтернативы, содержащаяся страница разрешает странице содержимого сообщать о ее высоте?)

Или CORS - это строго AJAX?

1 Ответ

17 голосов
/ 24 июня 2011

CORS не позволяет вам этого делать, но вы можете использовать обмен сообщениями между документами для отправки строк между iframes и их родительскими окнами даже в разные домены и использовать это для связи.

Большинство браузеров поддерживают этохотя путь Internet Explorer отличается от других '.

Предполагая, что вы хотите, чтобы iframe объявила родительской странице желаемую высоту, вы можете поместить этов вашем коде iframe (не проверено):

var message = {
    width: desiredWidth,
    height: desiredHeight
};
window.parent.postMessage(JSON.stringify(message),'*');

И это на вашей содержащей странице:

function onMessage (event) {
    if (event.source != theIFrameElement.contentWindow) return;
    var message = JSON.parse(event.data);
    var desiredHeight = message.height;
    var desiredWidth = message.width;   
}

if (window.attachEvent)
    window.attachEvent('onmessage', onMessage);
else if (window.addEventListener)
    window.addEventListener('message', onMessage, false);

attachEvent - для IE, а addEventListener - для всех остальных.Возможно, вы захотите проверить целевой источник в целях безопасности, но это общая идея.

РЕДАКТИРОВАТЬ : Поддержка браузера для обмена сообщениями между документами (-fsb)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...