У меня была эта проблема с похожим сценарием 2 года назад. Я решил это с помощью JavaScript в окне загруженной страницы new.onload, чтобы вызвать родительский документ и выполнить скрипт. На странице ребенка мы имели этот скрипт:
function goSetHeight(){
if (parent == window) return;
else parent.setIframeHeight('iframe_name');
}
// Edit: Forgot to add the window.onload call
window.onload = goSetHeight;
Этот скрипт до родительской страницы, где у нас были файл включен сценарий, который имел эту функцию:
function setIframeHeight(iframename) {
var iframeEl = document.all[iframename];
var iframeWin = window.frames[iframename];
if(iframeEl && iframeWin) {
//var docHt = getDocHeight(iframeWin.document);
//if(docHt) iframeEl.style.height = docHt + 30 + "px";
iframeEl.style.height = iframeWin.document.body.offsetHeight + 30 + "px";
}
}
Обратите внимание, что данная функция была написанный исключительно с учетом IE (это была спецификация приложения), поэтому для использования кросс-браузера потребуется модификация. Единственная проблема, которую мы столкнулись с ним были 2 частные случаи:
- У нас было несколько случаев, когда страницы, которые были загружены в IFRAME были из другого домена, чем страницы, держащего IFRAME. Это вызывает ошибку безопасности JavaScript, потому что браузер считает, что это атака XSS и ее отрицает.
- Мы также столкнулись с несколькими ситуациями, когда iframe был вложен в 2 глубины. Это была трудная работа, с которой я столкнулся с тем, что я был крайне недоволен, но это сработало, когда мы реорганизовали классический asp на .Net. С тех пор я потерял скрипт, который использовался для выполнения прохода, но он не был сложным, он просто выполнял аналогичную родительскую проверку и продолжал идти.
Спасибо, что я искал ... как насчет случая, когда у вас не было ajax на странице? с только «простым» javascript? – VSP
@ ase69s - В этом случае 'window.onload' будет работать нормально. ASP.Net AJAX позволяет обновлять контент без перезагрузки страницы. Если вы должны отключить AJAX, страница должна будет перезагрузиться, чтобы обновить контент (если вы не полностью переработали свой код). – gilly3