2013-07-26 5 views
0

У меня есть iframe на моей странице, который я хочу изменять каждый раз, когда содержимое изменяется, так что нет полос прокрутки. Содержимое фрейма изменяется часто, не изменяя URL. Я хочу, чтобы весь контент из фрейма отображался все время, без изменения мерцания экрана во время изменения размера кадра. Родитель и фрейм находятся в одном домене.Изменить размер IFRAME для удаления полос прокрутки

Прямо сейчас я вызываю функцию для установки размера кадра, когда я думаю, что размер был изменен. Как мне это сделать без вызова этой функции повсюду?

Если это помогает, я использую angularJS.

+0

Не было бы проще и более совместимо просто указывать 'overflow: hidden 'во встроенном документе? – nullability

+0

Хороший вопрос. Я не хочу, чтобы переполнение было скрыто. –

+0

попробуйте использовать прокрутку: no вы можете следовать свойства здесь http://www.w3schools.com/tags/tag_iframe.asp –

ответ

1

Вы можете получить высоту содержимого iFrames на [iframe] .contentWindow.document.body.offsetHeight. Если вы не знаете, когда изменяется размер содержимого, вам необходимо проверить его вручную, используя setInterval().

+0

setInterval - хорошая идея. Однако это вызывает мерцание экрана. Есть ли что-то, что не могло бы вызвать мерцание экрана? –

0

Попробуйте это, вызовите функцию повторно размера в качестве слушателя событий, когда-либо в Iframe загружает этот срабатывают

var iframe = document.getElementById('myIframe'); 
    var resizeFunction= function() {$("#myIframe").css({ 
     height: iframe.$("body").outerHeight() 
    });}; 
    if(iframe.addEventListener){ 
     iframe.addEventListener('load', resizeFunction, true); 
    }else if(iframe.attachEvent){ 
     iframe.attachEvent('onload',resizeFunction); 
    } 
+0

Это только уменьшает размер нагрузка. Содержимое моего фрейма меняется все время без нагрузки. –

0

Это функция которым я на одном из моего сайта. Я изменил код, который будет помещен в директиву.

Примечание: В IFRAME ваш контейнер должен иметь идентификатор ifrm_container

<iframe resize-iframe id="iframe" src="..."> 

.directive('resize-iframe', function() { 
    return { 
     restrict: 'A', 
     link: function (scope, elm, attrs) { 

     var container = elm.contentWindow.document.getElementById('ifrm_container'); // Iframe container. Usualy a div. 

     function autoResize(){ 
      ifrmNewHeight = container.offsetHeight; // New height of the document. 

      if(ifrmNewHeight !== ifrmOldHeight) { 
       ifrmOldHeight = ifrmNewHeight + 30; // +30 for no scrollbar. 
       ifrm.style.height= (ifrmNewHeight + 30) + "px"; // Set iframe style. 
      } 

      setTimeout(autoResize, 250); 
     } 
     // First call of autoResize(). 
     autoResize(); 
    }; 
}); 

Я проверил это решение на всех браузер даже IE7 и он работает хорошо, но не в директиве (Измененная некоторый элемент).

ДИРЕКТИВА ЭТО НЕ ПРОВЕРЕНА

+0

Ответ на макет Max в директиве - неплохая идея. Однако он все еще имеет тот же недостаток мерцания экрана. –

1

Попробуйте iframe-resizer, капля в модуле для расслоения плотных изменений размера плавающих фреймов автоматически.

Смежные вопросы