iOS设备下iframe宽度和高度无法自适应的问题

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

我是先判断了是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和安卓的问题。有看到的亲,改不好的话可以留言问我哈。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自适应高度,其实就是设置iframe的高度,使其等于内嵌网页的高度,从而看不出来滚动条和嵌套痕迹。对于用户体验和网...
    布拉德皮蛋_qzy阅读 3,373评论 0 3
  • 北京2018年4月1日上午,NBA常规赛勇士客战国王的比赛中,发生了令人痛心不已的一幕。比赛进行到第三节还有41...
    Curry_宇阅读 1,238评论 1 1
  • 最近在做pc端项目的时候由于某些原因吧用了很少接触的iframe;虽然知道很多坑,但是由于项目需要所以没有办法的使...
    小_花花哟阅读 617评论 1 0
  • 山西财经大学名气虽然没有中央财经大学、天津财经大学等财经类院校名气大,但是山西财经大学总体来说还是不错的。山西财经...
    道法自然008阅读 682评论 0 0
  • 我最喜欢的一句话:赠人玫瑰,手留余香。生活中有很多故事,如这句话,含着香,带着暖。 下午上班,看到同事拎着两大袋书...
    为爱而生820阅读 484评论 5 14