Как автоизмерить iFrame? [дубликат]

64
задан Community 23 May 2017 в 12:01
поделиться

7 ответов

На любом другом элементе я использовал бы scrollHeight из Объекта DOM и установил бы высоту соответственно. Я не знаю, работало ли это над iframe (потому что они являются немного чудными обо всем), но это, конечно, стоит попытки.

Редактирование: взглянув вокруг, популярное согласие устанавливает высоту из iframe использование offsetHeight:

function setHeight() {
    parent.document.getElementById('the-iframe-id').style.height = document['body'].offsetHeight + 'px';
}

И присоединение, что для выполнения с iframe-телом onLoad событие.

38
ответ дан uınbɐɥs 24 November 2019 в 16:00
поделиться

В IE 5.5 +, можно использовать contentWindow свойство:

iframe.height = iframe.contentWindow.document.scrollHeight;

В Netscape 6 (принимающий Firefox также), contentDocument свойство:

iframe.height = iframe.contentDocument.scrollHeight
1
ответ дан TimeSpace Traveller 24 November 2019 в 16:00
поделиться

Oli имеет решение, которое будет работать на меня. Для записи страница в моем iFrame представляется JavaScript, таким образом, мне будет нужна бесконечно малая задержка перед сообщением offsetHeight. Это похоже на что-то вдоль этих строк:


    $(document).ready(function(){
        setTimeout(setHeight);
    });

    function setHeight() {
        alert(document['body'].offsetHeight);   
    }
0
ответ дан Allan 24 November 2019 в 16:00
поделиться

На самом деле - вид кода Patrick обработанных для меня также. Корректный способ сделать это был бы вроде этого:

Примечание: вперед существует немного jQuery:


if ($.browser.msie == false) {
    var h = (document.getElementById("iframeID").contentDocument.body.offsetHeight);
} else {
    var h = (document.getElementById("iframeID").Document.body.scrollHeight);
}
-1
ответ дан Allan 24 November 2019 в 16:00
поделиться

Это решение работало лучше всего на меня. Это использует jQuery и ".load" событие iframe.

2
ответ дан craigmoliver 24 November 2019 в 16:00
поделиться

Я просто случайно пришел к вашему вопросу, и у меня есть решение. Но это в jquery. Это слишком просто.

$('iframe').contents().find('body').css({"min-height": "100", "overflow" : "hidden"});
setInterval( "$('iframe').height($('iframe').contents().find('body').height() + 20)", 1 );

Здорово!

Аплодисменты! :)

Edit: Если у вас есть редактор форматированного текста, основанный на методе iframe, а не на методе div, и вы хотите, чтобы он расширял каждую новую строку, то этот код сделает все необходимое.

10
ответ дан 24 November 2019 в 16:00
поделиться

Вот мертвое простое решение, которое работает во всех браузерах и с перекрестными доменами:

Во-первых, это работает на концепции, что если 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>
8
ответ дан 24 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: