Javascript jquery与否/跨浏览器兼容iframe resize(即,Chrome、Safari、Firefox)

Javascript jquery与否/跨浏览器兼容iframe resize(即,Chrome、Safari、Firefox),javascript,jquery,iframe,cross-browser,Javascript,Jquery,Iframe,Cross Browser,这是我的问题。我一直在努力寻找一个跨浏览器iframe调整大小的代码使用,我只是找不到一个。我所看到的只是一个浏览器中的问题。这就是我正在做的。我正在将iframe加载到jquery工具覆盖的页面中。这个iframe将加载页面的内容(在同一个域上,所以不必担心跨域)。当用户单击该表单上的某个操作时,iframe将再次需要调整大小(我让它在iframe增加时工作,但在iframe减少时不工作) 我有一个包含在iframe中的js文件,它有这个函数 $(window).load(function()

这是我的问题。我一直在努力寻找一个跨浏览器iframe调整大小的代码使用,我只是找不到一个。我所看到的只是一个浏览器中的问题。这就是我正在做的。我正在将iframe加载到jquery工具覆盖的页面中。这个iframe将加载页面的内容(在同一个域上,所以不必担心跨域)。当用户单击该表单上的某个操作时,iframe将再次需要调整大小(我让它在iframe增加时工作,但在iframe减少时不工作)

我有一个包含在iframe中的js文件,它有这个函数

$(window).load(function(){
    parent.adjust_iframe();
});
该函数然后调用父页面函数,如下所示:

function adjust_iframe() {

    //i have tried both body and html and both dont work in IE
    var h = $("#overlayFrame").contents().find("body").height();
    if(h==0)
    h="500";
    else
    h=h+3;

    $("#overlayFrame").css({'height': h});
    window.scrollTo(0,0);

}
上面的代码在Chrome和firefox中运行良好,但在IE中不行

有人帮忙吗?我真的需要一个跨浏览器兼容的轻量级解决方案,它不涉及一些不受支持的重jquery插件

谢谢

试试看

$(window).load(function(){
    var bodyHeight = $('body').height();
    parent.adjust_iframe( bodyHeight );
});

因为问题可能是页面无法访问iframes内容。

我有两个建议:

设置CSS高度时,请明确告诉它像素

$("#overlayFrame").css({'height': h + 'px'});
当iframe代码调用parent.adjust_iframe时,发送当前宽度/高度

parent.adjust_iframe($('body').height());

额外建议:做一点调查,告诉我们什么版本的IE以及为什么它不起作用。将一些警报放在那里,看看高度是否得到了导出等等。

我搜索了我的存档文件,找到了设置iframe窗口新大小的脚本。它正在研究IE6,FF

/**
 * Parent
 */
<iframe id="myframe" name="myframe" ...>

<script type="text/javascript">
var iframeids=["myframe"];
if (window.addEventListener) {
  window.addEventListener("load", resizeCaller, false);
}else if (window.attachEvent) {
  window.attachEvent("onload", resizeCaller);
} else {
  window.onload=resizeCaller;
}
var iframehide="yes";
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1];
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 20 : 0;
function resizeCaller() {
  var dyniframe=new Array();
  for (i=0; i<iframeids.length; i++){
    if (document.getElementById)
      resizeIframe(iframeids[i]);
    if ((document.all || document.getElementById) && iframehide=="no"){
      var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i]);
      tempobj.style.display="";
    }
  }
};

function resizeIframe(frameid){
  var currentfr=document.getElementById(frameid);
  if (currentfr && !window.opera){
    currentfr.style.display="";
    if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight)
      currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight; 
    else if (currentfr.Document && currentfr.Document.body.scrollHeight)
      currentfr.height = currentfr.Document.body.scrollHeight;
    if (currentfr.addEventListener)
      currentfr.addEventListener("load", readjustIframe, false);
    else if (currentfr.attachEvent){
      currentfr.detachEvent("onload", readjustIframe);
      currentfr.attachEvent("onload", readjustIframe);
    }
  }
};
function readjustIframe(loadevt) {
  var crossevt=(window.event)? event : loadevt;
  var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement;
  if (iframeroot)resizeIframe(iframeroot.id);
};

function loadintoIframe(iframeid, url){
  if (document.getElementById)document.getElementById(iframeid).src=url;
};
</script>

/**
 * child iFrame html
 */
<body onResize="resizeIE()">
/**
*母公司
*/
变量iframeids=[“myframe”];
if(window.addEventListener){
addEventListener(“加载”,resizeCaller,false);
}else if(窗口附件){
attachEvent(“onload”,resizeCaller);
}否则{
window.onload=resizeCaller;
}
var iframehide=“是”;
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf(“Firefox”)).split(“/”[1];
var FFextraHeight=parseFloat(getFFVersion)>=0.1?20 : 0;
函数resizeCaller(){
var dyniframe=新数组();

对于(i=0;ii)进行了警报,在IE8中,我得到一个警报,说高度是150。这是iframe调整前的原始大小
/**
 * Parent
 */
<iframe id="myframe" name="myframe" ...>

<script type="text/javascript">
var iframeids=["myframe"];
if (window.addEventListener) {
  window.addEventListener("load", resizeCaller, false);
}else if (window.attachEvent) {
  window.attachEvent("onload", resizeCaller);
} else {
  window.onload=resizeCaller;
}
var iframehide="yes";
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1];
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 20 : 0;
function resizeCaller() {
  var dyniframe=new Array();
  for (i=0; i<iframeids.length; i++){
    if (document.getElementById)
      resizeIframe(iframeids[i]);
    if ((document.all || document.getElementById) && iframehide=="no"){
      var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i]);
      tempobj.style.display="";
    }
  }
};

function resizeIframe(frameid){
  var currentfr=document.getElementById(frameid);
  if (currentfr && !window.opera){
    currentfr.style.display="";
    if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight)
      currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight; 
    else if (currentfr.Document && currentfr.Document.body.scrollHeight)
      currentfr.height = currentfr.Document.body.scrollHeight;
    if (currentfr.addEventListener)
      currentfr.addEventListener("load", readjustIframe, false);
    else if (currentfr.attachEvent){
      currentfr.detachEvent("onload", readjustIframe);
      currentfr.attachEvent("onload", readjustIframe);
    }
  }
};
function readjustIframe(loadevt) {
  var crossevt=(window.event)? event : loadevt;
  var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement;
  if (iframeroot)resizeIframe(iframeroot.id);
};

function loadintoIframe(iframeid, url){
  if (document.getElementById)document.getElementById(iframeid).src=url;
};
</script>

/**
 * child iFrame html
 */
<body onResize="resizeIE()">