这个问题困扰了我几个星期,网上百度了各种方法,终于是解决了。
我是先判断了是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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。