向大家致敬,
我会尽量保持简短:在我负责的 Web 应用程序的一个视觉上较粗糙的区域中,我编写了几个简单的 JS 函数来存储和调用框架集中框架的位置。屏幕是高度用户特定的,由嵌套的框架集组成(我知道,我知道,但这是遗留代码,我们目前没有可用的资源来重构它),他们可以拖动框架以便他们可以看到他们需要的元素,这些位置被写入一个 cookie,这样当他们下次进入这个功能区域时,它就会像他们离开它一样呈现出来。
这在我主要用于开发的 Firefox 中运行良好,但在我们需要支持的 IE8 下测试失败。我想我已经确定了负责的属性:
var cols = new Array();
var rows = new Array();
var framesets=parent.document.getElementsByTagName('frameset');
for (var i = 0; i < framesets.length; i++){
cols[i]=framesets[i].cols;
rows[i]=framesets[i].rows;
}
这些数组被写入 cookie,但获得的位置值似乎有问题。我使用哪种变体并不重要,例如
cols[i]=framesets[i].cols;
cols[i]= parent.document.getElementsByTagName('frameset')[i].cols;
cols[i]= parent.document.getElementsByTagName('frameset').item(i).cols;
cols[i]= parent.document.getElementsByTagName('frameset')[i].getAttribute("cols");
- 将框架拖到新位置后,不会在 IE 中更新 rows 和 cols 属性。其他所有方面都按预期工作 - cookie 是在框架集卸载时创建的,并且在加载时框架属性被写入。具有讽刺意味的是,如果我提供硬编码值,IE 写入这些属性没有问题,然后框架会像魅力一样调整大小,但在手动重新定位框架后,我似乎无法记录它们的值。
此外,当我手动拖动框架以调整它们的大小而不是使用 IE 的开发人员工具时,我可以看到 Firefox 的 Firebug 下的属性发生变化 - 即使在刷新输出后,框架的 rows 和 cols 属性仍保持为初始/默认值。
拖帧后行和列的值:
IE8 Developer Tools
<frameset name=" display" rows="*" cols="350,*" onload="restoreFrames()" onunload="storeFrames()">
<frameset rows="50%,50%" cols="*" border="1" borderColor="#ffffff" frameSpacing="1" onload="restoreFrames()" onunload="storeFrames()">
<frameset rows="50%,50%" cols="*" border="1" borderColor="#ffffff" frameSpacing="1" onload="restoreFrames()" onunload="storeFrames()">
Firebug
<frameset rows="*" cols="553,46%" name=" display">
<frameset bordercolor="#ffffff" framespacing="1" border="1" cols="*" rows="14%,86%">
<frameset bordercolor="#ffffff" framespacing="1" border="1" cols="*" rows="50%,50%">
我很想让这个工作,有没有人遇到过类似的事情,或者也许有另一种方法或方式来访问这些我可以用来存储框架位置的属性?这应该是相当标准的东西 - 我很难相信 IE 在重新定位后不会更新框架属性。
编辑:我认为这是 IE 中嵌套框架集的一个功能 - 对单个框架集中的简单框架的测试看起来好像 rows 和 cols 属性会在移动分隔符时更新,而不是嵌套框架集。
非常感谢任何帮助。谢谢!
克里斯