完全搞定iframe(框架)里的滚动条!(一)
说明:
1、本文参考了网络上大量资料,本人在此深表感谢!
2、本文假设读者,有一定的HTML、CSS、JS基础。
3、本文讨论的目标是,通过A页面里的<iframe>标记引用B网页之后,在A页面上出现滚动条这种情况的几种解决办法。
4、因为篇幅的关系,文章被分成了两部分。通常情况下,(一)就能解决你的问题,(二)将会深入探讨这个问题和相关的解决方案。
5、如果你觉得我啰嗦,请直接从方案一开始读起。
6、文档的附件里有各种解决方案的示例代码供大家下载,我尽量把每一种方案都放在一个独立的文件夹里面。(这是一个asp的case,里面可能会包含一些asp方面的代码。)
7、解决问题的方法有两种:CSS和JS,本人倾向于使用JS这种方法。
8、实际上遇到这种问题的时候,有两种情况:i)在A页面上iframe的大小固定,不允许延展(拉宽或拉长),但是B页面的内容比iframe长(也有宽的时候,本人实际工作中遇到长的时候比较多,本文也只讨论长的情况,宽的情况以此类推,把相应的height换成width就行了。ii)A页面上可以不限制iframe的长度,B页面的长度超过iframe的长度,B页面可能延展iframe的长度,通常B页面也会把A页面的长度自动给延展了。
i)这种情况通常是用在网站首页、栏目首页这些地方,出现的次数比较多。
ii)这种情况出现的比较少,我在使用网易邮箱“记事本”时发现网易邮箱的这种情况,研究之后用在了一个在线销售网站的产品评论上了(http://www.pplily.com/product_view.asp?id=1380)。评论的列表,放在<iframe>里面,根据一评论的多少,<iframe>的长度会跟着发生变化,整个网页的长度也要变化。
9、示例代码下载:
http://www.jqs0086.com/ncp/images/完全搞定iframe的滚动条!.rar
我今天遇到的情况是,i)和ii)这两种情况全都“赶上了”。研究了好一会,总算把相关的问题都解决了,现在总结一下。
现在我说明一下面的将要使用的三个文件:
1、A文件,网站首页,中间有一个width:450和heidth:260的<iframe>。 iframe的ID是SellMoney 指向的文件就是B。
A文件部分代码:

2、B文件,一个数据列表,数据大约50行,每页30行,分为两页,宽度自动,高度(30行数据的实际高度)800px左右。
B文件部分代码:





























































































































3、C文件,中间中间有一个width:450和heidth:无限的<iframe>。 iframe的ID是SellGold指向的文件也是B。
【注意 A文件iframe的ID是SellMoney ,C文件是SellGold,】
C文件的作用就是把B“包”起来,给B加上导航、登录框什么的。实际上也可以把B文件的代码直接加到C里面,但我现在A文件和C文件都通过iframe引用B,这样的话,就能偷懒了,而且美其名曰:“代码重用”。*_^
C文件就是为了说明 ii )情况准备的,没有后台编程经验的朋友,可以不关注C文件和ii)这种情况。我也打算把ii)这种情况放到另一篇文章当中进行讨论。
C文件部分代码:

解决方案一:
去掉文件开头的文档声明。
不使用"DOCTYPE "文档声明(详细代码在下面)的话很容易就过去了。但是不使用文档声明,一是代码不规范,二是不能获得文档的高度。 下面的代码执行的结果是pageHeight=160px;,而实际上B文件的高度(长度)是800px左右。

--------
有关的文档声明:


---------------
解决方案二:
在B文档的css里定义body的width<437。但是这样就是固定了,也不太合适。只能用在一个文件里,在另一个文件的iframe 可能宽达500、600,但是B文件却被挤压到450,页面的一边或者两条出现大块的空白。









解决方案三:
在B文件的CSS中使用overflow。
使用overflow需要注意以下问题:
1、使用overflow之前看看网页的开头没有没使用文档声明,如果使用了文档声明,那么必须同时定义HTML和BODY两个标记。
2、overflow-x和overflow-y分别定义横向的滚动条和纵向的滚动条,但是它们是IE专有属性,只有在IE(4.0)以上的版本才能使用。
3、overflow-x: hidden;使用之后,有可能会被纵向的滚动条挡住右边一部分内容。





使用js代码自动调整B文件的宽度,B文件宽度减小之后,横向的滚动条自然就消失了。
注意:
1、 代码里有两段函数都叫expandWindow,你实际上只需要选择其中一个就行了。这只是同一函数的不同版本,上面的版本,我详细说明了每行代码的作用,下面的版本,我简化了一下,显得干净一些。
2、这段代码,是独立运行的,与A、C文件无关与A文件里的iframe的ID是什么也无关。这样的话,就与上面的“B文件部分代码”不完全一样了。 “B文件部分代码”需要兼顾A、C两种情况,所以它的代码很复杂。
3、 通常情况下,只需要下面这段代码就能解决问题了。推荐您使用下面的代码!
把下面的代码放到B文件(或者其它需要只显示纵向滚动条的网页)里,A网页打开之后,调用B网页,B页面打开之后,自动执行代码,横向滚动条自动消失。


























































转载请注明本文地址: 完全搞定iframe(框架)里的滚动条!(一)