如何使用Javascript删除嵌套框架和iframe的滚动条
How to remove scrollbar of nested frames and iframes using Javascript
我正在研究包含不同数量的嵌套框架和iframe的web应用程序。目前,当网页呈现时,浏览器呈现滚动条。有时计数是4-5个滚动条在一个页面上,这看起来很难看。所以我想通过Javascript删除这些滚动条。
要理解这个问题,请参见下面的一个带有框架/iframe层次结构的网页示例。
Frame1
--Frame2
--Frame3
--Frame4
--Frame5
我的方法:从根文档开始,从页面中搜索所有帧/iframe,并将这些帧节点与附加变量level一起放入Array中。完成后,我在水平上对数组进行排序。这个活动数组之后会是这样的。在
0> Frame5 node, level=3
1> Frame4 node, level=3
2> Frame3 node, level=2
3> Frame2 node, level=2
4> Frame1 node, level=1
在此之后,我正在考虑两个选项来删除滚动条
选项1:从数组的第0个元素开始,获取frame的scrollheight,并将其设置为frame的height属性。
var frameScrollHeight=Frame5.contentWindow.document.body.scrollHeight;
Frame5.style.height =frameScrollHeight;
对数组中的每一帧执行相同的过程。我在这里的假设是,如果最内层框架的高度改变,它的父节点滚动高度必须改变为真正的滚动高度。在设置Frame5和Frame4高度之后。当我们获取Frame3的滚动高度时,它必须是frame5的高度+Frame4的高度。但现在它没有反映真正的滚动高度。我不确定这里出了什么问题。当我们设置Frame5和frame4的高度时,Dom会立即刷新吗?.我是否使用了错误的属性?因为我验证了所有其他属性也使用脚本调试器,如clientHeight,offsetHeight,但没有一个相当于Frame5高度+ Frame4高度。
选项# 2 由于上述方法不能正常工作,我采用了另一种方法手动添加先前的关卡帧高度,并将其设置为下一关卡的父节点。例如,获取Frame5和Frame4的scrollheight并将其设置为Frame3,同时添加Frame3和Frame2的height并将其设置为Frame1。
选项二现在可以工作了,但是它仍然有一些缺点,比如所有的帧必须按层次顺序排列,并且不能彼此平行。
同样,当我将scrollheight设置为Frame的高度时,滚动条仍然会出现,我必须添加一些常量,如15到scrollheight。实际代码是
var frameScrollHeight=Frame5.contentWindow.document.body.scrollHeight+15;
Frame5.style.height =frameScrollHeight;
我不知道这15是什么。它是一个框架边界吗?我能用坐标系的任何性质得到这个常数吗?
我更喜欢选项1,但不知道为什么这不起作用。如果有其他方法可以解决这个问题,请建议。
为什么不直接使用
html,body{overflow:hidden}
在CSS中的iframes?
我有同样的问题,下面的函数(使用jquery)为我工作后,我将所有帧转换为iframe。这个函数将调整每一帧的大小,这样就不需要滚动条了:
var resizeFramesSoAllContentVisible = function (win) {
for (var i = 0; i < win.frames.length; i++) {
var frame = win.frames[i];
var contentWindow = frame.contentWindow ? frame.contentWindow : frame.window;
resizeFramesSoAllContentVisible(contentWindow);
}
if (win.frameElement) {
var myFrameOuterHeight = $(win.frameElement).height();
var myFrameInnerHeight = $(win.document).height();
var myFrameOuterWidth = $(win.frameElement).width();
var myFrameInnerWidth = $(win.document).width();
if (myFrameOuterHeight != myFrameInnerHeight) {
$(win.frameElement).height(myFrameInnerHeight);
}
if (myFrameOuterWidth != myFrameInnerWidth) {
$(win.frameElement).width(myFrameInnerWidth);
}
}
}
- 在firefox和chrome中的左侧显示iframe滚动条
- 使用浏览器滚动条而不是iframe滚动条
- 无法使用jQuery自定义内容滚动条将自定义滚动条添加到iframe
- 如何在angular js中使用滚动条打印iframe内容
- 隐藏滚动条 iFrame 子网站
- Iframe 滚动条不在页面右侧
- HTML,Javascript - 拆分比iFrame宽的单词,而不是生成滚动条
- 如何同步 2 个 iframe 的滚动条
- 摆脱花哨框iframe上无用的滚动条
- 从iframe中隐藏滚动条,并将其替换为页面上的滚动条
- 为iFrame创建浮动水平滚动条
- 在Facebook iframe滚动条或页面中途剪切之间进行选择
- 如何在iframe调整大小时重置父窗口滚动条
- 如何在特定iframe滚动条的滚动条上调用适当的JavaScript方法
- 自定义iframe的滚动条
- 在javascript中反复切换iframe滚动条
- 如何自定义twitter iframe滚动条的样式
- 在隐藏和显示Iframe元素后,Iframe滚动条不显示在chrome中
- 使iframe滚动条消失
- Iframe滚动条替换为我自己的设计