酷版移动端iframe改变src,重新加载页面问题探究
最近在酷版上我要做一个内嵌别人的网页的在线服务页面,于是必须用到iframe,以前我以为移动端不支持iframe呢,原来这样都可以。。。。(呵呵,长见识了!我还是只菜鸟)
直接入正题,说说我遇到的困难或者说是我需要解决的问题:
1、重构人员提供页面之后,我给页面上的iframe设置一个src属性,发现那个页面根本不能上下滑动。我就到处搜,有的人说酷版移动端iframe里面不会像pc端一样自动产生滚动条,我真的信了!于是我不得不让产品去和即将上线的几个合作方谈一下,让他们在页面里设置一个document.domain,然后在body上注册一个onload事件,页面加载完成后设置iframe的高度,这样即使iframe没有自动产生滚动条有了固定高度也能够看到所有页面。内嵌页面内容html如下
<body onload="setParentIframeHeight()">
<div class="wraper">内容...</div> <script>
function setParentIframeHeight(){
document.domain=window.location.host.match(/[^.]+\.[^.]+$/)[0];
parent.document.getElementById('serviceBody').style.height = window.document.body.scrollHeight + "px";
}
</script>
</body>
这样做能解决问题,但是大大限制了能接入的页面的数量。
但是后来仔细看了一下下面的html,原来我被重构人员坑了,他给iframe加了一个scrolling = "no",这让伦家怎么出现滚动条啊!
<article id="serviceContent" style="width:100%;height:100%;">
<iframe id="serviceBody" width="100%" height="100%" frameborder="0" scrolling="no"></iframe><!--可能需JS计算高度 height="100%" -->
</article>
2、iframe内两个页面切换的问题
要切换iframe里的页面很简单,只要改变iframe的src属性值就可以了,有两种方式改变:
第一种:
document.getElementById('iframeId').src = "http://www.baidu.com";
第二种:
document.getElementById('iframeId').contentWindow.location.href = "http://www.sina.com.cn/";
但是有个问题,就是用这两种方式改变iframe里的页面地址,并不会重新加载页面,也就是不会触发body的onload事件,导致切换页面的时候滚动条没有回到最上面,所以只是在第一次创建那个iframe的时候才触发了一次,后面的页面都没有触发body的onload,找了好久都没结果,没办法只能使用绝招,把iframe一起干掉,既然改变src不会刷新页面,那么就每次都重新创建一个iframe,这样才终于解决了问题。
function createNewpage(container,newSrc) {
var self = this; var iframe = document.createElement("iframe");
iframe.src = newSrc;
iframe.id = "serviceBody";
iframe.style.width = "100%";
iframe.style.height = "100%";
container.appendChild(iframe); if (window.navigator.userAgent.indexOf('IE') == -1) { //非IE的浏览器
iframe.onload = setIframe;
} else {
iframe.onreadystatechange = function() { //IE浏览器
if (iframe.readyState == 'complete') { //判断状态
setIframe();
}
}
} function setIframe(){
doSomething else;
}
}
上面的代码是参照这个改的:http://xiaogai1010.blog.163.com/blog/static/13717030820135932746318/
酷版移动端iframe改变src,重新加载页面问题探究的更多相关文章
- iframe中,重新加载页面
比如在iframe中的页面,设置一个onclick事件的触发函数flush function flush(){ window.location.reload(); }
- 构建服务端的AMD/CMD模块加载器
本文原文地址:http://trock.lofter.com/post/117023_1208040 . 引言: 在前端开发领域,相信大家对AMD/CMD规范一定不会陌生,尤其对requireJS. ...
- ExtJs非Iframe框架加载页面实现
在用Ext开发App应用时,一般的框架都是左边为菜单栏,中间为tab页方式的显示区域.而tab页面大多采用的嵌入一个iframe来显示内容.但是采用iframe方式有一个很大的弊端就是每次在加载一个新 ...
- 移动端下拉刷新、加载更多插件dropload.js(基于jQuery/Zepto)
移动端下拉刷新.加载更多插件dropload.js(基于jQuery/Zepto) 原文:http://www.grycheng.com/?p=1869 废话不多说,先让大家看一下案例效果: DEMO ...
- RE:通过移动端滑动手势实现数据加载
背景: 基于要尝试的移动端项目需要有一个通过上拉下滑手势达成加载不同数据的功能,其涉及到滑动手势和ajax数据加载方面的知识点.故对整个实现过程做一个记录整理.个人JS功底有限,看 ...
- layer iframe加载单个图片或者加载页面
加载单个图片 layer.open({ type: , title: false, closeBtn: , area: '150px', skin: 'layui-layer-nobg', //没有背 ...
- 基于zepto的H5/移动端tab切换触摸拖动加载更多数据
以前实现移动端的滑动加载更多实现的方法是当滚动条快到页面底部时就自动加载更多的数据,在这方面很多人都用的是"西门的后花园"写的一个叫dropload的插件,这个插件用起来也很好,很 ...
- 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载
要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...
- jQuery - 动态创建iframe并加载页面
<html> <head> <script language="JavaScript" src="jquery-1.11.1.min.js& ...
随机推荐
- Drozer
Drozer原名mercury,是一款不错的Android APP安全评估工具.现在有社区版/专业版两个版本 本教程针对于Windows平台下drozer的安装与使用.使用该工具需要JDK的支持,所以 ...
- 设计模式入门之訪问者模式Visitor
//訪问者模式定义:表示一个作用于某对象结构中的各个元素的操作,它使你能够在不改变各元素类的前提下定义作用于这些元素的新操作. //从定义上看.这个模式跟装饰模式的定义非常类似(动态地给一个对象加入一 ...
- 常用shell命令的写法
这并不是教人怎么进行shell编程的文章,只是韦哥在工作中用到的一些简单脚本的写法.因为有些命令即使用过几次了,再次使用时仍然写不对,需要man来看下或者需要google,你也可以理解为对命令的理解不 ...
- 怎样搭建svn本地server,管理本地的代码
搭建svn本地server,以下是详细的步骤介绍. 一.准备工作 1.下载svnserver端:Subversion. 到官方站点(http://s version.tigris.org/)下载最新的 ...
- Arcgis Engine(ae)接口详解(7):地图(map)操作
IMap map = null; //跟map同一层次的activeView对象,他们都是“地图”的对象,map管理地图内容,activeView管理显示内容 IActiveView activeVi ...
- 程序设计之另一种读写函数---writev,readv
read()和write()系统调用每次在文件和进程的地址空间之间传送一块连续的数据.但是,应用有时也需要将分散在内存多处地方的数据连续写到文件中,或者反之.在这种情况下,如果要从文件中读一片连续的数 ...
- ID--HANDLE--HWND三者之间的互相转换
利用PreTranslateMessage,响应按钮控件的按下(WM_LBUTTONDOWN)和松开(WM_LBUTTONUP) VC的button控制只有两个事件,一个是单击事件,一个事双击事件 ...
- 无节操cocos2d-js游戏
1. <看谁抽得快> 2. <拍苍蝇> 3. <月饼达人> 4. <亲吻小游戏> 下面这些是本人做的,需要源代码的可以回复我 ps:全部采 ...
- OO的片段,继承与组合,继承的优点与目的,虚机制在构造函数中不工作
摘自C++编程思想: ------------------------------ 继承与组合:接口的重用 ------------------------------- 继承和组合都允许由已存在的类 ...
- UIActivityIndicatorView控件的属性和方法
对于UIActivityIndicatorView的使用,我们一般会创建一个背景View,设置一定的透明度,然后将UIActivityIndicatorView贴在背景View上,在我们需要的时候将这 ...