iframe自适应高度 iframe

本以为在前端道路上不会用到iframe,毕竟html5已经废弃了。但是项目中还是遇到了,于是各种百度开始啦
下面是我百度到的代码:

<iframe id="iframe"  scrolling="no" frameborder="0" style="width:540px;text-align: center;"  src="aaa.html?shop_id=26"></iframe>


var ifm = document.getElementById("iframe");
	ifm.onload = function() {
		var subWeb = document.frames ? document.frames["iframe"].document : ifm.contentDocument;
		if (ifm != null && subWeb != null) {
		ifm.height = subWeb.body.scrollHeight + 44;
		alert(ifm.height)
		}
	}

然后在我写的时候这还没有完,因为iframe的高度和之前一样,并没有自适应,后来我找到了src中引用的页面 ,显式的获取页面文档高度 给body元素
document.body.offsetHeight
这样就可以啦…

但是 由于rc中引用的页面存在异步, 上面的方法需要放到ajax 成功的回调之后

由于本人的项目 那个页面有多个ajax封装的方法, 所以索性 更改代码:

var ifm = document.getElementById("iframe");
	ifm.onload = function() {
		var subWeb = document.frames ? document.frames["iframe"].document : ifm.contentDocument;
		setTimeout(function() {
			if (ifm != null && subWeb != null) {
			ifm.height = subWeb.body.scrollHeight + 44;
			alert(ifm.height)
			}
		}, 4000)
	}

iframe嵌进去的页面是不可点击的,设置一下样式就可以

<style>  
    iframe{  
        pointer-events: none;  
    }  
</style>  

嗯 就这样,之后再优化

今天没事了 改了一下 把setTimeout改成了setInterval,代码如下:

var ifm = document.getElementById("iframe");
	ifm.onload = function() {
		var subWeb = document.frames ? document.frames["iframe"].document : ifm.contentDocument;
		var heightArray = [];
		var interval = setInterval(function() {

			if (ifm != null && subWeb != null) {
				ifm.height = subWeb.body.scrollHeight + 44;
			}

			heightArray.push(ifm.height);

			if(heightArray.length > 1) {
				if(heightArray[heightArray.length-2] === heightArray[heightArray.length-1]) {
					clearInterval(interval)
				}
			}

		}, 1200)
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值