这个问题困扰了我几个星期,网上百度了各种方法,终于是解决了。

我是先判断了是iOS设备还是安卓设备

var click = device.mobile() ?'touchstart' :'click';

var u = navigator.userAgent;

var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端用的这个方法,然后在iOS下

iframe +='*width: 100%;width: 1px; min-width: 100%;" scrolling="no" ';这句话控制了自适应宽度,其实我也不明白为什么width前面要加*,为什么要有个1PX。但是有了这个,确实能生效。

也可以这么写:

<div style="overflow:auto;-webkit-overflow-scrolling:touch;width:100%;height:100%;">

<iframe src="w1.1.html" frameborder="0" height="100%" scrolling='no' style="width:1px; min-width:100%; *width:100%;">

</div>

这个是我试了很多方法中,唯一iOS设备中能用不出错的,然后这样了以后,iOS的高度无法自适应,只能百分之百显示,不能拉到底,安卓的可以,所以我在判断里面,单独给iOS设备写了个自适应高度。代码如下:

// iframe高度自适应

function changeFrameHeight(ifm) {

if (isIOS) {

var cacheHeight =0;

function run() {

var mf = $("#mainFrame")[0];

// when the main frame has already been loaded, the check its height

if (mf && mf.contentDocument && mf.contentDocument.body) {

var iframeHeight = $("#mainFrame")[0].contentDocument.body.clientHeight;

if (iframeHeight && iframeHeight != cacheHeight) {

// cache the main frame height

cacheHeight = iframeHeight;

$("#mainFrame").height(iframeHeight);

}

}

setTimeout(run, 200);

}

run();

}else {

ifm.height = document.documentElement.clientHeight -118;

}

}

,然后安卓和苹果的都能用了,改好之后还有点不敢相信,但是确实解决了在iframe下兼容iOS和安卓的问题。有看到的亲,改不好的话可以留言问我哈。

作者:十年一品温如言1008
链接:https://www.jianshu.com/p/3a099b642f23
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

iOS设备下iframe宽度和高度无法自适应的问题 及不断刷新问题
标签: