Как авто-размер iFrame? [дубликат]
Возможные Дубликаты:
изменение размера iframe на основе содержимого
я загружаю iFrame и хочу, чтобы родитель автоматически изменял высоту на основе высоты содержимого iFrame.
просто вещи, все страницы принадлежат к одному домену, поэтому я не должен сталкиваться с проблемами межсайтовых сценариев.
12 ответов:
на любом другом элементе, я бы использовал
scrollHeightобъекта DOM и установите высоту соответственно. Я не знаю, будет ли это работать на iframe (потому что они немного сумасшедшие обо всем), но это, безусловно, стоит попробовать.Edit: осмотревшись, популярный консенсус устанавливает высоту внутри iframe, используя
offsetHeight:function setHeight() { parent.document.getElementById('the-iframe-id').style.height = document['body'].offsetHeight + 'px'; }и прикрепите это для запуска с iframe-body's
onLoadсобытие.
Я просто случайно зашел на ваш вопрос и у меня есть решение. Но его в jquery. Это слишком просто.
$('iframe').contents().find('body').css({"min-height": "100", "overflow" : "hidden"}); setInterval( "$('iframe').height($('iframe').contents().find('body').height() + 20)", 1 );вот так!
Ура! :)
Edit: если у вас есть богатый текстовый редактор, основанный на методе iframe, а не метод div, и вы хотите, чтобы он расширял каждую новую строку, то этот код будет делать все необходимое.
вот мертвое простое решение, которое работает на каждом браузере и с кросс-доменами:
во-первых, это работает на концепции, что если html-страница, содержащая iframe установлен на высоту 100% и iframe стилизован с использованием css, чтобы иметь высоту 100%, то css будет автоматически размер все, чтобы соответствовать.
вот код:
<head> <style type="text/css"> html {height:100%} body { margin:0; height:100%; overflow:hidden } </style> </head> <body> <iframe allowtransparency=true frameborder=0 id=rf sandbox="allow-same-origin allow-forms allow-scripts" scrolling=auto src="http://www.externaldomain.com/" style="width:100%;height:100%"></iframe> </body>
этой решение работали лучше для меня. Он использует jQuery и iframe ".событие Load.
в IE 5.5+, вы можете использовать свойство contentWindow:
iframe.height = iframe.contentWindow.document.scrollHeight;в Netscape 6 (предполагая, что firefox также), свойство contentDocument:
iframe.height = iframe.contentDocument.scrollHeight
Я нашел решение @ShripadK наиболее полезным, но это не так работайте, если есть более одного iframe. Мое исправление:
function autoResizeIFrame() { $('iframe').height( function() { return $(this).contents().find('body').height() + 20; } ) } $('iframe').contents().find('body').css( {"min-height": "100", "overflow" : "hidden"}); setTimeout(autoResizeIFrame, 2000); setTimeout(autoResizeIFrame, 10000);
$('iframe').height($('iframe').contents().find('body').height() + 20)установить высота каждого кадра равна одному и тому же значению, а именно высоте содержимого первого кадра. Поэтому я использую jqueryheight()функции вместо значения. Таким образом, человек высоты рассчитываются+ 20это хак, чтобы обойти проблемы полосы прокрутки iframe. Число должно быть больше чем размер полосы прокрутки. Хак, вероятно, может следует избегать, но отключение полосы прокрутки для элемента iframe.- Я использую
setTimeoutвместоsetInterval(..., 1)чтобы уменьшить нагрузку на процессор в моем случае
Оли есть решение, которое будет работать для меня. Для записи страница внутри моего iFrame отображается javascript, поэтому мне понадобится бесконечно малая задержка, прежде чем сообщать о смещении. Похоже, что-то вдоль этих линий:
$(document).ready(function(){ setTimeout(setHeight); }); function setHeight() { alert(document['body'].offsetHeight); }
на самом деле-код Патрика вроде как работал и для меня. Правильный способ сделать это будет примерно так:
Примечание: есть немного jquery впереди:
if ($.browser.msie == false) { var h = (document.getElementById("iframeID").contentDocument.body.offsetHeight); } else { var h = (document.getElementById("iframeID").Document.body.scrollHeight); }
Это самый простой метод, который я нашел с помощью прототипа:
Главная.html:
<html> <head> <script src="prototype.js"></script> <script> function init() { var iframe = $(document.getElementById("iframe")); var iframe_content = $(iframe.contentWindow.document.getElementById("iframe_content")); var cy = iframe_content.getDimensions().height; iframe.style.height = cy + "px"; } </script> </head> <body onload="init()"> <iframe src="./content.html" id="iframe" frameBorder="0" scroll="no"></iframe> <br> this is the next line </body> </html>содержание.html:
<html> <head> <script src="prototype.js"></script> <style> body { margin: 0px; padding: 0px; } </style> </head> <body> <div id="iframe_content" style="max-height:200px;"> Sub content<br> Sub content<br> ... ... ... </div> </body> </html>Это, кажется, работает (до сих пор) во всех основных браузерах.
мой обходной путь-установить iframe высоту / ширину хорошо над любым ожидаемым размером исходной страницы в CSS & the
backgroundсвойствоtransparent.в iframe set
allow-transparencyдоtrueиscrollingдоno.единственное, что видно будет, что исходный файл, который вы используете. Он работает в IE8, Firefox 3 и Safari.
мое решение, (с помощью jquery):
<iframe id="Iframe1" class="tabFrame" width="100%" height="100%" scrolling="no" src="http://samedomain" frameborder="0" > </iframe> <script type="text/javascript"> $(function () { $('.tabFrame').load(function () { var iframeContentWindow = this.contentWindow; var height = iframeContentWindow.$(document).height(); this.style.height = height + 'px'; }); }); </script>
Comments