关于ios,safari和iframe的各种

最近没更新过vue的demo和博客,主要原因还是因为手头上有工作,假日也是忙得不行。不过能折腾一下也好,证明自己其实还年轻嘛。

回到正题,我负责的一个项目用的是iframe嵌套页面,bootstrap做UI框架,iframe各种坑我也是早有耳闻,在开始的时候也踩了不少,好在查了不少资料也算是解决了。忽然有一天需求大哥跟我说:兄弟不得了啦,你的页面在iphone上滚动不了,点击也没反应啦。我一下被吓得花枝乱颤:我明明在chrome上面模拟过没问题的啊,拿起旁边UI妹子的肾6一看果然如此,我默默看了一眼chrome的图标:果然实践是检验真理的唯一标准啊。

打开项目一看,点击没反应,嗯,后台大哥用了jquery的双击“dblclick”(后台大哥也负责写一点js),上网一查,果然,iso不支持双击事件,这个比较简单,我写了个检测用户环境的函数:获取navigator.userAgent,然后返回一个字符串,利用正则式匹配对应的关键字(iphone,ipad,iso之类),匹配成功确定是iso环境的话就改用一般的“click”事件,轻松解决了。

最重要的问题是不能滚动页面,这我可是第一次听说,我检查了一遍我没有限制过页面的overflow属性,那应该就是iso本身的问题了,网上查一下,果然很多人都注意到了这个问题,只要在iframe外面套一个控元素,然后添加:-webkit-overflow-scrolling:touch;overflow:auto;到样式里面去就可以了,果然,加上去之后。。。。。。不行!!!应该说是无效,因为我的iframe就是设定宽高都是100%,不存在iframe滚动的问题,需要滚动的是iframe的内容,于是我干脆把这个属性加到iframe的内容里面去,结果成功了,看来这个属性并不限定使用在iframe之外,具体的原理还是需要再花时间研究。

我以为事情告一段落的时候,需求大哥又跟我说:我点开一个tab之后发现整个页面都撑开了!!!我又是一脸黑线,打开项目,仔细检查了整个继承链,保证了每个父元素都是宽度100%,只有最后的子元素有超过屏幕大小的宽度(父元素设置了overflow:auto),平时是隐藏的,点击某个tab之后切换显示,当显示的时候,整个iframe就被撑开了,用chrome看iframe宽度,刚好是子元素的宽度:就是说子元素撑开了iframe,但问题是我设置了overflow了啊,又是一头雾水,无解,又上网找解决办法,不料这个方面的问题比较少,花了比较久的时间,最后,是ios解释iframe的问题,有些情况下overflow会失效,iframe会出现高宽重置的情况,只能在宽度样式属性上添加!important;用最高权限禁止iframe的宽度改变。

虽说花了不少的时间,但最后还是解决了问题,iframe被人嫌弃我也是能理解了,虽然不是太能用上的知识,但解决问题的一瞬间还是非常棒的,继续加油吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值