Изменить размер iframe после добавления нагрузки - PullRequest
2 голосов
/ 13 января 2012

У меня проблемы с изменением размера iframe после его загрузки при помощи javascript.Я использую установленную ширину около 300 пикселей, которая работает нормально, но динамически изменяет высоту iframe по размеру его содержимого (запись в блоге).

Я пытался получить contentWindow (не было дочерних элементов dom) и contentDocument(который был неопределен) безрезультатно.

Я делаю это при загрузке:

var iframe = document.createElement('iframe'); 
iframe.setAttribute('id','postFrame'); 
iframe.setAttribute('frameborder','no'); 
iframe.setAttribute('scrolling','no'); 
iframe.setAttribute('onload','resizeFrame();'); 
iframe.setAttribute('width','300px'); 
iframe.setAttribute('src','http://espn.go.com/espn/print?id=7454651'); 
var container = document.getElementById('container'); 
container.appendChild(iframe);


function resizeFrame(){ /* resize iframe based on content height*/ }

Есть ли способ изменить размер высоты iframe на основе содержимого внутри iframe?

* РЕДАКТИРОВАТЬ **

Возможное решение:

Есть ли надежда, что я мог бы использовать Access-Control-Allow-Origin для помощиэта проблема?Допустим, страница, которая идет в iframe, является моей или эходирована из php-скрипта

1 Ответ

1 голос
/ 13 января 2012

Я использую следующую функцию, чтобы изменить размер фрейма в соответствии с высотой содержимого.Это приложение для интрасети (и только должным образом протестировано в IE8), но, безусловно, работает, поэтому оно может предоставить недостающую подсказку -

function sizeIframeToContent(id) {
    // resize iframe to be the height of the content
    try {
        var frame = document.getElementById(id);
        innerDoc = (frame.contentDocument) ?
                   frame.contentDocument : frame.contentWindow.document;
        var objToResize = (frame.style) ? frame.style : frame;
        objToResize.height = innerDoc.body.scrollHeight + 10 + 'px';
        //objToResize.width = innerDoc.body.scrollWidth + 10 + 'px';
    }
    catch (err) {
        console.log(err.message);
    }
}

Редактировать объяснение - после загрузки документа вам следуетбыть в состоянии найти высоту документа, которую вы можете использовать в качестве высоты для iframe.Я прокомментировал часть ширины вышеупомянутой функции, поскольку вы конкретно спрашиваете о высоте.

...