iframe
之前有遇到iframe在ios上的问题,没有记录下来。今天又遇到了,感觉有必要记录一下。比如如下代码
1 2 3 4 5 6 7 8
| <style>html,body:{padding:0}</style> <body style="width:100%"> <iframe width="100%" height="100%"/> </body> <body style="width:100%"> <iframe style="width:100%;height:100%;"/> </body>
|
上面的代码在pc和安卓上一般运行都没有问题。但是在ios上会发现实际页面宽度过宽,无论是使用iframe的width属性,还是直接设置css的width属性;都直接被ios忽略调,不起作用。
解决方案:
1 2 3 4 5 6
| <style>html,body{padding:0}</style> <body style="width:100%"> <div style="overflow: auto;-webkit-overflow-scrolling:touch;width:100%;height:100%;"> <iframe id="con_ifr" src='+decodeURIComponent(hash.substr(1))+' frameborder="0" height="100%" scrolling="no" style="width: 1px; min-width: 100%; *width: 100%;"></iframe> </div> </body>
|
iframe min-width是可以生效的的,当然前提是要加上scrolling=”no”。这直接导致垂直方向上不能滑动。如果实在同域下也是可以解决的,那就是动态计算内部页面的高度
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| if(/iphone/i.test(navigator.userAgent)){ var ifr = document.getElementById('ifr'); function reinitIframe(){ try{ var bHeight = ifr.contentWindow.document.body.offsetHeight; var height = bHeight; if(ifr.height == height) return; ifr.height = height; }catch (ex){} } window.setInterval(reinitIframe.bind(this), 200); }
|
如果不同域,目前我还没找到什么比较好的方案。
所以最好就退而求其次。让iframe自适应文本内容。在iframe外层添加wrapper。让iframe在其中滑动。