Могут ли заголовки Cross-Origin Resource Sharing разрешать доступ к IFRAME X-домену?

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

Позволяют ли заголовки Cross-Origin Resource Sharing (CORS) странице содержимого разрешать междоменный доступ к своим ресурсам и, таким образом, разрешать содержащейся странице считывать ее высоту? (или, в качестве альтернативы, содержащая страница разрешает странице содержимого объявлять свою высоту?)

Или CORS строго относится к AJAX?


person Community    schedule 23.06.2011    source источник


Ответы (1)


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

Большинство браузеров поддерживают это, хотя способ 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)

person PaulG    schedule 23.06.2011
comment
Браузеры, поддерживающие onmessage, современные? IE8, FF3 и т. Д.? - person ; 24.06.2011
comment
Вот таблица поддержки браузера. Я мог добавить только 2 ссылки к своему ответу, потому что у меня не хватило репутации для большего. caniuse.com/x-doc-messaging - person PaulG; 24.06.2011
comment
спасибо за ссылку на таблицу поддержки браузера и ответ. Я принимаю это, исходя из предположения, что вы правы в том, что CORS не помогает, но особенно для того, чтобы выйти за рамки исходного вопроса с помощью очень полезной альтернативы. onmessage стоит знать. - person ; 24.06.2011
comment
Посмотрим, смогу ли я добавить к вашему ответу таблицу поддержки вашего браузера. - person ; 24.06.2011