这是我的问题。我一直在寻找一个跨浏览器iframe调整大小代码使用,我只是找不到。我所看到的只有一个浏览器存在问题。这就是我在做的事情。我正在jquery工具覆盖中将iframe加载到页面中。这个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插件。
谢谢!
答案 0 :(得分:0)
尝试
$(window).load(function(){
var bodyHeight = $('body').height();
parent.adjust_iframe( bodyHeight );
});
和
function adjust_iframe(newHeight) {
//i have tried both body and html and both dont work in IE
if(newHeight == 0) {
newHeight = 500;
} else {
newHeight += 3;
}
$("#overlayFrame").css({'height': newHeight});
window.scrollTo(0,0);
}
因为问题可能是页面无法访问iframes内容..
答案 1 :(得分:0)
我有2条建议:
设置CSS高度时,请明确告诉它像素。
$("#overlayFrame").css({'height': h + 'px'});
当您的iframe代码调用parent.adjust_iframe时,请发送当前的宽度/高度。
parent.adjust_iframe($('body').height());
BONUS建议:做一点调查并告诉我们什么版本的IE以及为什么它不起作用。在那里放一些警报,看看是否有高度等等。
答案 2 :(得分:-1)
我搜索了我的存档文件并找到了设置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()">