2013-06-29 2 views
1

У нас есть два домена, domain.com и sub.domain.comПерекрестный домен, но управляйте обоими доменами: задайте высоту iframe на его содержимое?

На domain.com

<html> 
<head> 
    <title>Main</title> 
</head> 
<body> 
    <h1>This is the parent</h2> 
    <iframe src="http://sub.domain.com/results.aspx" 
      width="100%" height="1px" id="iframe1"> 
    </iframe> 
</body> 
</html> 

Quesiton: Как мы можем отрегулировать высоту IFrame от 1px на это реальная высота (когда Iframe нагрузки)? Поскольку пользователь играет в iframe, его высота может измениться, поэтому я подозреваю, что может потребоваться привязать его к некоторому событию.

Теперь я полностью осознаю, что в браузере предотвращается перекрестный скриптинг и что даже поддомены (или разные номера портов) составляют «кросс-домен». Тем не менее, мы контролируем оба домена, поэтому я ищу хорошее решение для этого. Мы посмотрели на window.postMessage, который, похоже, был специально разработан для этого, но не мог заставить его работать.

+0

Я никогда не использовал это, но, похоже, был плагин jQuery для поддержки даже старых браузеров: http://archive.plugins.jquery.com/project/postmessage – HMR

ответ

2

Ваш случай прост, потому что это междоменные поддомены (а не межсайтовые разные области). Просто назначьте document.domain = "domain.com" как на своей странице, так и на iframe. Для получения дополнительной информации, проверьте: Cross sub domain iframes and JavaScript и How to communicate between frames?

1

Что вы ищете в IFrame передача сообщений:

https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

В родительской странице:

var iframe = document.getElementById('myIframe'); 

function resizeIframe(event){ 
    if (event.origin !== "http://example.org"){ 
    // We trust this message 
    iframe.setAttribute("style", "width:" + event.data + "px;"); 
    } 
} 

window.addEventListener('message', resizeIframe, false); 

В детская страница:

function postParent(){ 
    window.postMessage($(body).height(), 'http://parentdomain.org'); 
} 

$(window).on('load', postParent);