2010-06-25 2 views
0

Прежде чем начнутся комментарии «избиение мертвой лошади», позвольте мне уточнить, что я пытаюсь сделать, чтобы узнать, может ли кто-нибудь помочь мне.iFrame Автоматическая калибровка

У меня есть родительское окно с iFrame в нем. Содержимое в iFrame загружается из отдельного домена, где я думаю, что мои проблемы начинаются, хотя это должно быть именно так. Когда страница первоначально загружается, я выполняю следующее:

<script language="javascript" type="text/javascript"> 
    var reportFrame = document.getElementById('report'); 

    function resizeIframe() { 
     var height = document.documentElement.clientHeight; 

     height -= reportFrame.offsetTop; 

     // not sure how to get this dynamically 
     height -= 20; /* whatever you set your body bottom margin/padding to be */ 

     reportFrame.style.height = height + "px"; 

    } 

    reportFrame.onload = resizeIframe; 
    window.onresize = resizeIframe; 

</script> 

Это прекрасно работает. В iFrame нет полос прокрутки и отлично смотрится, как я хочу. Проблема, с которой я сталкиваюсь, - это iFrame имеет кнопку, которая вызывает обратную связь по кадру. Мне нужно запустить этот скрипт, когда iFrame перезагрузится, чтобы запретить показывать полосы прокрутки. Из-за того, что дочерняя страница находится в отдельном домене, я не могу вызывать функцию от нее родительской (довольно уверен, что это то, где XSS входит в игру), поэтому мне нужно придумать другой способ, чтобы родитель знал это необходимо запустить этот скрипт, потому что iFrame перезагружается.

Любые предложения?

ответ

2

Вы можете добавить таймер, который проверяет масштабируются и через регулярные промежутки времени:

setInterval("resizeIframe()", 1000); //check every second 

[Edit - ссылки для изменения размеров скриптов]

ЗАКАНЧИВАТЬ http://geekswithblogs.net/rashid/archive/2007/01/13/103518.aspx и Resizing an iframe based on content для скриптов на изменение размера фрейма.

+0

Я думал об этом, но не был уверен в влиянии на производительность. Я дам ему шанс! Благодаря! – RubyHaus

+0

Я пробовал и без радости - я думаю, что это связано с тем, что окно не меняет размер, так как оно отключается от клиента. Высота окна. Любые другие предложения? – RubyHaus

+0

Добавил некоторые ссылки в свой ответ. И таймер должен работать нормально. Может быть, с 500 мс даже. Чтобы оптимизировать его, вы можете запускать таймер каждый раз, когда вы получаете onmouseleave на родительском фрейме и останавливаете его, когда вы получаете onmouseenter. Но не уверен, что вам действительно нужно работать мудро. Это может быть преждевременная оптимизация. –