Вот мой код для изменения размера iframe с внешним веб-сайтом. Вам необходимо вставить код на родительскую (с кодом iframe) страницу, а также на внешний веб-сайт, так что это не будет работать, если у вас нет доступа для редактирования внешнего веб-сайта.
- локальная страница (iframe): просто вставьте фрагмент кода
- удаленная (внешняя) страница: вам нужны "onload body" и "div", который содержит все содержимое. И тело должно быть стилизовано под "margin: 0"
Местное время:
<IFRAME STYLE="width:100%;height:1px" SRC="http://www.remote-site.com/" FRAMEBORDER="no" BORDER="0" SCROLLING="no" ID="estframe"></IFRAME>
<SCRIPT>
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
if (e.data.substring(0,3)=='frm') document.getElementById('estframe').style.height = e.data.substring(3) + 'px';
},false);
</SCRIPT>
Вам нужен этот префикс "frm", чтобы избежать проблем с другими встроенными кодами, такими как плагины Twitter или Facebook. Если у вас обычная страница, вы можете удалить префикс «if» и «frm» на обеих страницах (script и onload).
Пульт дистанционного управления:
Вам необходим jQuery для достижения "реальной" высоты страницы. Я не могу понять, как это сделать с чистым JavaScript, так как у вас будут проблемы при изменении высоты вниз (выше или ниже) с использованием body.scrollHeight или связанных с ним. По какой-то причине он всегда будет возвращать самую большую высоту (предварительно измеренную).
<BODY onload="parent.postMessage('frm'+$('#master').height(),'*')" STYLE="margin:0">
<SCRIPT SRC="path-to-jquery/jquery.min.js"></SCRIPT>
<DIV ID="master">
your content
</DIV>
Итак, родительская страница (iframe) имеет высоту по умолчанию 1 пиксель. Скрипт вставляет «ожидание сообщения / события» из iframe. Когда сообщение (сообщение отправлено) получено, и первые 3 символа являются «frm» (чтобы избежать упомянутой проблемы), получит число из 4-й позиции и установит высоту iframe (стиль), включая единицу измерения «px».
Внешний сайт (загруженный в iframe) «отправит сообщение» родителю (открывателю) с «frm» и высотой основного div (в данном случае id «master»). «*» В пост-сообщении означает «любой источник».
Надеюсь, это поможет. Извините за мой английский.