酷版移动端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& ...
随机推荐
- 洛谷P2058 仪仗队
P2058 仪仗队 24通过 34提交 题目提供者shengmingkexue 标签数论(数学相关) 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 作为体育委员,C君 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)
我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了class的文件结构,在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下 ...
- BUPT复试专题—Python List(2014)
题目描述 在Python中,List (列表)是一种非常重要的数据结构.它与C/C++/Java中的 数组有些类似,但支持添加新元素时的动态扩展.在这个问题中,你需要处理如下 的几种对List的操作. ...
- java中等待所有线程都执行结束(转)
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- javascript判断一个变量或对象是否存在
判断一个变量或对象是否存在,是一种常用的操作.我这里收集了几种. //1. 最常用的一种方法.if(typeof v == 'undefined'){ console.log("v is u ...
- XML Schema笔记
XML Schema是为了弥补DTD的不足而开发的一种新的用于约束和规范XML文档的标准 XML Schema作用: 定义可出现在文档中的元素定义可出现在文档中的属性定义哪些元素是子元素定义子元素的次 ...
- ExtJs学习笔记(1)---ExtJs安装及其使用
从官网下载了ExtJs的3.2版本号的SDK,包括了代码依赖的具体说明.文档.范例和其它文件.当中,adapter和resources文件是Ext正常执行所必须的,其它的仅在开发过程中使用到. Ada ...
- 有遍历struct中字段信息的函数或方法
例:struct a{int a;char b[10];double c;}; 在程序中只知道一个结构 a 的指针, 有没有函数能通过结构的名字 和 指向结构的指针 随次得到 结构中的变量类型 和 变 ...
- linux学习:进程间通信—管道
1.进程间通信当中一种比較简单的方法是管道操作 /* ========================================================================= ...
- Html.Partial
老革命永远都在遇上各种似是而非的老问题. 这次,是这个Html.Partial,分部页. Html.Partial与Html.Action有啥区别呢?区别就是,Html.Partial只有一个视图,而 ...