我有一个框架集,其中一个框架中有一个按钮,可以将其父框架集最小化到一定的大小。
代码有效,但问题是如果我选择先用鼠标手动调整框架大小,然后按最小化按钮,它将在IE8和Chrome中错误地调整大小。它在FF中正确调整大小。
我有这个HTML结构
...
<frameset cols="32%,*" border="2" frameborder="1" framespacing="1">
<frameset rows="350,*" border="2" frameborder="1" framespacing="1" id="searchResultFrameset">
<!-- The minimize button are in this frame searchResultFrame -->
<frame name="searchResultFrame" scrolling="no" src="dummy">
<frame name="itemFrame" frameborder="1" scrolling="no" id="itemFrame" src="dummy2"></frameset>
<frame name="contentFrame" frameborder="0" scrolling="yes" id="contentFrame" src="dummy3">
</frameset>
...
和按下按钮时执行的代码。
// Minimize frame button
$('.minimizeFrame').toggle(function () {
parent.document.getElementsByTagName('frameset')[1].setAttribute('cols','22,*');
}, function () {
parent.document.getElementsByTagName('frameset')[1].setAttribute('cols','32%,*');
});
我可以看到开发人员工具中的cols="32%,*"
更改为cols="22,*"
,但仍然呈现错误的大小。
为什么鼠标更改后调整不正确?我错过了什么或是浏览器中的错误?或者是否有一个替代解决方案可以在没有此错误的情况下调整框架大小?
示例
答案 0 :(得分:1)
看起来Webkit中的这个错误自2010年以来一直被忽略:
答案 1 :(得分:1)
这对我有用。我创建了一个&#34;重置&#34; cols和&#34;之后&#34;设置正确的宽度。似乎复位后必须有一个超时或一种“#34;触及&#34;儿童框架
function init_page() {
function setCols(frms, cols) {
// for some magic reason we have to 1st -> reset current cols
frms.setAttribute('cols', '');
// and 2nd ask about child width (it's now clientWidth)
for (var i = 0; i < frms.children.length; ++i) {
if (frms.children[i] && (typeof frms.children[i].clientWidth != "undefined" || typeof frms.children[i].width != "undefined")) {
}
}
frms.setAttribute('cols', cols);
}
// Minimize frame button
$('#minimizeButton')
.toggle(function () {
setCols(parent.document.getElementsByTagName('frameset')[0], '50,*');
},
function () {
setCols(parent.document.getElementsByTagName('frameset')[0], '50%,*');
});
}
答案 2 :(得分:0)
如果我理解你试图设置一个在不同帧中的对象的属性。 有些浏览器不接受。
如果我尝试重现你的问题,我可以看到在firefox中我可以切换框架的大小(没问题)。
然而,在Chrome中,我收到一个安全错误,因为我试图在另一个页面上设置一个属性,即框架内页面内的框架集页面。
编辑:以下代码适用于IE8。这就是你需要的吗?
不要忘记添加jquery-1.8.2.min.js文件
file:index.html
<!doctype html public "-//w3c//dtd html 4.01 frameset//en"
"http://www.w3.org/tr/html4/frameset.dtd">
<html>
<head>
<title>a simple frameset document</title>
</head>
<frameset cols="32%,*" border="2" frameborder="1" framespacing="1">
<frameset rows="350,*" border="2" frameborder="1" framespacing="1" id="searchResultFrameset">
<!-- The minimize button are in this frame searchResultFrame -->
<frame name="searchResultFrame" scrolling="no" src="frame1.html">
<frame name="itemFrame" frameborder="1" scrolling="no" id="itemFrame" src="dummy2"></frameset>
<frame name="contentFrame" frameborder="0" scrolling="yes" id="contentFrame" src="dummy3">
</frameset>
</html>
file:frame1.html
<html>
<head>
<script src="jquery-1.8.2.min.js"></script>
<script>
$(init_page);
function init_page()
{
// Minimize frame button
$('#minimizeButton')
.toggle(function ()
{
parent.document.getElementsByTagName('frameset')[0].setAttribute('cols','22,*');
},
function ()
{
parent.document.getElementsByTagName('frameset')[0].setAttribute('cols','32%,*');
});
}
</script>
</head>
<body>
<button id='minimizeButton'>toggle</button>
</body>
</html>
答案 3 :(得分:0)
我遇到了同样的问题,我使用隐藏的建议,然后设置然后重新出现,它对我有用。见下面的例子:
var $frames = $( <parentElement> ).find( '<framesetname>' )[ 0 ];
frames.hide().attr('cols', '*,500').show();
他们在Chrome,Firefox,IE11和&歌剧。 希望它适合你。