前言

  才发现已经有一段时间没有写博客了,就简单的说了最近干了啥吧。前段时间忙了杂七杂八的事情,首先弄了个个人的小程序,对的,老早就写了篇从零入手微信小程序开发,然后到前段时间才弄了个简单的个人小程序,主要是关于菜式方面制作的,原因么,就在我另外一件事情上有说到了,就是然后又弄了个个人的公众号《前端美食汇》(附:个人介绍链接)。大概之前就干了这两事。不过老实说也不用多少时间。搞得好像用了我很多时间似的,哈哈,还是懒~~~

  重点补充下,以为博客的文章的侧重点会在解决项目上遇到的实际问题,而在公众号上会侧重于技术提升方面的分享,喜欢的可以关注下我的公众号喔~~~

  小程序二维码

正文

  好了说了这么多,正式如题。

  iframe我觉得应该是用得不多了吧,由于对性能影响比较大,所以应该没啥特殊情况的话不会用的吧,好巧不巧,我们项目用到了,也好巧不巧,还是应用到移动端上了,头大了。当然,iframe的引用可以不影响本身页面的布局这点还是不错的。

  这次主要说的就是iframe在移动端上使用存在的问题。

  主要问题:

  1.iframe在iPhone上滚动条失效

  2.iframe在移动端上显示时不能全部展示完全

  3.iframe在iPhone上宽度被撑开

  ok,这些问题就是我在项目上应用iframe时发现的。开始来一一解决。

iframe在iPhone上滚动条失效

  主要原因是由于iframe设定了一定的高度之后,由于iframe内容的足够长超过了iframe的设定高度时,在iPhone上滚动条没效。

  而解决办法也比较简单,就是给iframe设定一个外层div,并设定外层div的样式:

-webkit-overflow-scrolling: touch; /* 当手指从触摸屏上移开,会保持一段时间的滚动 */
overflow-y: scroll;

  这样就可以实现iframe在iPhone上的滚动了。

iframe在移动端上显示时不能全部展示完全

  如果不想以滚动条的形式显示,而是把iframe内容全部展示的话,OK,通过设定iframe高度height="100%",实际一般标签确实这样就实现了内容展开。但是,问题又来了。发现并没有,还是只显示一部分,于是,只能通过js的手段进行高度的动态设置,见代码:

function setIframeHeight(id){
try{
var iframe = document.getElementById(id);
if(iframe.attachEvent){
iframe.attachEvent("onload", function(){
iframe.height = iframe.contentWindow.document.documentElement.scrollHeight;
});
return;
}else{
iframe.onload = function(){
iframe.height = iframe.contentDocument.body.scrollHeight; };
return;
}
}catch(e){
console.warn('setIframeHeight Error');
}
}

  通过这样,就能实现完全的展开iframe内容了。好了,以为完美的解决问题了,一上正式服,纳尼,测试服上没有,正式服上iPhone浏览竟然发现内容被撑开,出现了左右的滚动条,原因get不到,有知道的大神可以留言,先谢过了。

iframe在iPhone上宽度被撑开

  于是就开始头大怎么解决这个问题了,当然,按照上面设定高度的方法设置宽度发现无效...。于是,经过一轮纠结,决定直接获取iframe内的内容进行填充。于是这个是我想到的唯一解决在iPhone上宽度被撑开的问题。由于本来项目的原因还是得加载iframe,所以还是得从iframe加载完然后动态获取内容再加载进设定的div内,见代码:

function setIframeContent(id){
try{
var iframe = document.getElementById(id);
if(iframe.attachEvent){
iframe.attachEvent("onload", function(){ console.log(iframe.contentWindow.document.body.innerHTML);
document.getElementById("iframeInner").innerHTML=iframe.contentWindow.document.body.innerHTML;
return;
}else{
iframe.onload = function(){ //console.log(iframe.contentDocument.body.innerHTML);
document.getElementById("iframeInner").innerHTML=iframe.contentDocument.body.innerHTML;
return;
}
}catch(e){
console.warn('setIframeHeight Error');
}
}

  ok,这样就能获取到iframe的内容了。

  当然,问题1到3就是我遇到加载iframe在移动端上的存在的问题的解决路上遇到的问题,并且一路解过来时发现的各种问题。并且一一解决各问题最后决定应用的方式。也一一列举出来,看获取你只需要实现某一步即可。

写到最后

  iframe在移动端上的使用出现的问题可能不止这些,或者不止这些方法,要是你有更好的方法可以留言让更多的需要的看到喔。

  最后,也希望大家可以关注下我的个人公众号《前端美食汇》。

  

  

解决iframe在移动端(主要iPhone)上的问题的更多相关文章

  1. 解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作

    window.addEventListener('load', function() { FastClick.attach(document.body); }, false); //300s延迟,解决 ...

  2. Iphone上对于动态生成的html元素绑定点击事件$(document).click()失效解决办法

    在Iphone上,新生成的DOM元素不支持$(document).click的绑定方法,该怎么办呢? 百度了N久都没找到解决办法,在快要走投无路之时,试了试Google,我去,还真找到了,歪国人就是牛 ...

  3. 移动端bug~~移动端:active伪类无效的解决方法【移动端 :active样式无效】

    移动端:active伪类无效的解决方法[移动端 :active样式无效]2016-09-26  15:46:50 问题: 移动端开发的时候实现按钮的点击样式变化,但是在iphone[safiri Mo ...

  4. 解决 placeholder 垂直不居中,偏上的问题

    解决 placeholder 垂直不居中,偏上的问题 安卓浏览器显示placeholder 垂直不居中,而iphone没问题,搜了一下答案,解决方法是把input的line-height去掉就行 参考 ...

  5. CP="CAO PSA OUR" 用P3P header解决iframe跨域访问cookie

    1.IE浏览器iframe跨域丢失Session问题 在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的因此,网上 ...

  6. iphone上click事件不触发的问题解决。

    iphone上click事件不触发的问题解决. //在ID为jsProvince上有这么一个事件: $('body').on('click', '#jsProvince', function(e){ ...

  7. iphone上mitmproxy证书设置

    PC端安装mitmproxy并添加证书后,基本问题不大,都能正常运行起来 手机端iphone上下载安装mitmproxy证书: 1.手机和PC在同一个局域网中,设置wifi代理为PC端的ip,端口为m ...

  8. h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)

    h5微信页面在手机微信和微信开发者工具中都能正常显示,但是在pc端微信浏览器上打不开或者数据加载不出来. 原因:pc端微信浏览器不支持ES6语法,我的代码中使用了一些ES6的特性 解决:将ES6转换为 ...

  9. 用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面

    用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地 ...

随机推荐

  1. JAVA内部类_1

    使用内部类的原因: (1)可以访问该类定义所在作用域中的数据,包括私有数据. (2)可以对同一个包中的其它类隐藏起来. (3)当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷. 下面 ...

  2. Using mysqldump for Backups(备份还原数据库实例及参数详细说明)

    官网mysqldump命令如下: Using mysqldump for Backups https://dev.mysql.com/doc/refman/5.7/en/using-mysqldump ...

  3. Linux根文件系统介绍

    系统 根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后 ...

  4. 03_Android项目中读写文本文件的代码

    编写一下Android界面的项目 使用默认的Android清单文件 <?xml version="1.0" encoding="utf-8"?> & ...

  5. 【一天一道LeetCode】#73. Set Matrix Zeroes

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. [WinForm]最小化到系统托盘,右键退出

    1.拉出一个notifyIcon1到用户界面,也可以NEW一个 2.拉出一个ContextMenuStrip控件,命名为mymenu,集合中增加退出 3.notifyIcon1的属性ContextMe ...

  7. 大多数时候是软件的Bug,但是... 有时候的确是硬件的问题!

    在我们性能最好的服务器中,有一台是从之前的64位测试项目中遗留下来的.那台机器配有皓龙250双核处理器,内存有8 GB.服役了一年之后,那种配置仍然是相当不错的.它还有贴心的升级方案可选:它的泰安Th ...

  8. 数据的压缩存储与解压缩算法实现(C语言)

    在一些嵌入式的项目设计中,空间是相当宝贵的,因为一个CPU的存储是有限的,所以此时我们在保存数据的时候,喜欢来进行压缩保存,著名的有哈夫曼树算法,专门用来做压缩的算法,当然,本节我们不讨论这些稍微高级 ...

  9. android 优化之布局优化

    布局优化的思路很简单,尽量减少布局文件的层级,看过系统源码的都知道,Android view绘制都是逐层绘制的,所以布局的层级少了,decodeview的时候绘制工作自然就少了. 那么如何进行布局的优 ...

  10. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...