改变& lt; frameset>使用JavaScript滚动
Change <frameset> scrolling with JavaScript
我们在应用程序中使用帧。在一帧中,滚动设置为"auto"
。我试图根据一个小条件改变frame属性。下面是HTML和JavaScript:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=5">
</head>
<frameset>
<frame src="#" name="contentFR" id="contentFR" scrolling="Auto" noresize marginwidth="0" marginheight="0">
</frameset>
<script language="javascript">
var iFrm = document.getElementById("contentFR");
iFrm.setAttribute('scrolling', 'no');
</script>
</html>
我用的是ie11,但是我的应用程序只能在ie5兼容模式下运行
更新方法:只需克隆节点。
// Proceed when the document has loaded
var timer = setInterval(function () {
// The document has loaded
if ( document.readyState === "complete" ) {
// Stop checking document load-state
clearInterval( timer );
// Get our frame, and create a clone of it
var frame = document.getElementById("contentFR");
var clone = frame.cloneNode(true);
// Update the scrolling on the clone
clone.setAttribute("scrolling", "no");
// Replace original frame with clone frame
frame.parentElement.replaceChild(clone, frame);
}
}, 10);
关于选择这条路由的原因,请参见下文。
我很困惑,改变属性,和/或属性,不工作。当然,我只能在Windows 10的ie 11上检查,所以我不知道同样的问题是否会在早期版本的ie中重现。既然你说你的用户将使用ie11,我们可以放心地假设,如果我们遇到这个问题,他们也会遇到。
我还发现将<script>
置于框架集之下也不起作用,所以我不得不将其放在<head>
中(脚本只能放置在<body>
或<head>
中,并且由于本文档中没有<body>
,我们只能将它们放置在<head>
中)。因为头部是先被解析/创建的,所以我们的frame元素不会及时存在,无法从头部更改它。此外,由于我们正在使用IE 5文档模式,我们不能仅仅在document
上监听DOMContentLoaded事件。相反,我选择每隔10ms检查一次document.readyState
值,直到它注册为完整的。
最后,正如您所发现的,简单地更新属性似乎不起作用。设置属性似乎也不起作用。奇怪的是,如果您在执行操作后检查元素,这两种方法实际上都将值从Auto更改为No,但是更改没有反映在文档中。出于这个原因,我决定创建一个全新的框架,取代另一个。
这段代码让人感觉真的,真的被误导了。希望有人能来分享一种方法,这种方法不需要从根本上复制一个元素,并将一个元素的属性应用于另一个元素。在此之前,这个解决方案似乎是有效的。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=5">
<script type="text/javascript">
// Proceed when the document has loaded
var timer = setInterval(function () {
if ( document.readyState === "complete" ) {
// Stop checking document load-state
clearInterval( timer );
// Get our frame, and create a replacement
var frame = document.getElementById("contentFR");
var newFrame = document.createElement( "frame" );
// Copy all attributes over
var i = 0, attr;
for ( ; i < frame.attributes.length; i++ ) {
attr = frame.attributes[i];
// If we found a scrolling attribute, set it to 'no'
if ( attr.name === "scrolling" ) attr.value = "no";
// Apply old attribute to new frame
newFrame.setAttribute( attr.name, attr.value );
}
// Replace old frame with new frame
frame.parentElement.replaceChild( newFrame, frame );
// Null-out our variables
frame = i = attr = timer = null;
}
}, 10);
</script>
</head>
<frameset cols="50%, *">
<frame src="side.html">
<frame src="page.html" id="contentFR" scrolling="Auto" noresize marginWidth="0" marginHeight="0">
</frameset>
</html>
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- 无锚点的JavaScript滚动页面
- 如何在使用函数document.write()打印最终结果后,使用Javascript滚动到页面顶部
- Javascript滚动到底,生成重复的请求
- Javascript滚动激活
- Javascript滚动并调整窗口大小
- HTML锚加Javascript滚动
- 使用iOS7的iPhone上未启动JavaScript滚动事件
- JavaScript滚动图片库在Chrome或IE中不起作用
- 如何用javascript滚动html中pdf对象元素的底部
- 没有按钮的Javascript滚动器有问题
- Javascript滚动和移动位置
- JavaScript滚动文本;t负载变量
- 带有转换比例错误的自定义JavaScript滚动条(jScrollPane)
- 创建新窗口时使用Javascript滚动条
- 使用Javascript滚动列表
- 如何在正文加载之前使用 javascript 滚动页面
- JavaScript 滚动到 y 位置
- 如何使用 JavaScript 滚动事件更改 HTML 输入
- 使用纯 Javascript 滚动到可滚动 DIV 中的元素