我在IE10中测试了一些脚本,似乎浏览器在设置属性cols
时遇到了问题。
示例:
parent.middle.document.getElementById("middle_frames").cols = "0,*"
这适用于SAF / Chrome / FF / IE7 / IE8 / IE9,但在IE10中它不起作用。
任何有帮助的人?
我无法在我的项目中显示我的问题,但我制作了一个虚拟脚本来向您展示问题。 制作3个文件(如下所示)并在IE10中运行它们,然后单击“更改列”按钮。 适用于IE10以外的所有浏览器。在我的示例中,您看到我使用了doctype,也尝试过没有doctype,同样的问题。
frameset_main.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Framesets</title>
</head>
<frameset id="framesets" cols="200,*" frameborder="0" border="0" framespacing="0">
<frame src="frame1.html" name="frame1" id="frame1" scrolling="vertical" noresize="noresize">
<frame src="frame2.html" name="frame2" id="frame2" scrolling="vertical" noresize="noresize">
</frameset>
</html>
frame1.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Frame 1</title>
</head>
<body style="background-color: green;">
</body>
</html>
frame2.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Frame 2</title>
<!-- ONPAGE JAVASCRIPT -->
<script type="text/javascript">
function dothis(){
parent.document.getElementById("framesets").cols = "500,*";
}
</script>
</head>
<body style="background-color: red;">
<div id="main_container" class="cls_main_container">
<input type="button" id="btn_do_this" onclick="dothis();" value="change cols" />
</div>
</body>
</html>
答案 0 :(得分:11)
对我来说,以下似乎有效(它有点像Raads修复)
parent.document.getElementById("framesets").cols="0,24%,*";
parent.document.getElementById("framesets").rows=parent.document.getElementById("framesets").rows; //IE10 bug fix
答案 1 :(得分:5)
看起来是IE 10的错误。到目前为止还没有决议。
答案 2 :(得分:2)
(这是微软解决IE 10错误的解决方法):
在处理.cols
之后,我调用了一个强制重绘帧的脚本,
在您的示例中,结果应如下所示:
parent.document.getElementById("framesets").cols = "500,*";
$('#frame2').forceRedraw(true);
可以在此处找到forceRedraw
脚本:Howto: Force a browser redraw/repaint,并需要指向jQuery
的链接才能正常工作。
答案 3 :(得分:1)
我在IE10中遇到了同样的问题。它适用于IE8和IE9,它也适用于IE11预览版。所以它似乎是一个IE10错误。
我最简单的解决方法是一行,不需要插件或其他功能,如下所示:
$('#framesetId').hide().attr('cols', '50,*').show();
此解决方案适用于IE10,并且仍可在所有其他现代浏览器中使用。
答案 4 :(得分:0)
我花了很多时间在这上面。我想在不需要jQuery的情况下解决这个问题 使用此代码可以使Internet Explorer 10对cols的更改生效:
parent.document.getElementById("framesets").removeAttribute("cols");
parent.document.getElementById("framesets").setAttribute("rows", "500,*");
parent.document.getElementById("framesets").removeAttribute("rows");
parent.document.getElementById("framesets").setAttribute("cols", "500,*");
答案 5 :(得分:0)
Emanuele上面描述的重绘方法是正确的解决方案。但是,jQuery插件站点上不再提供引用的插件。
这对我来说迫使IE10设置帧列属性...
1)创建一个小的jQuery插件,立即隐藏并显示一个元素,有效地重绘它。
(function ($) { $.fn.redrawFrame = function () { return $(this).each(function () { $(this).hide(); $(this).show(); }); } })(jQuery)
2)在JavaScript中引用它如下:
$('#framesetId').attr('cols', '50,*').redrawFrame();
答案 6 :(得分:0)
我通过在cols属性更新行之后添加这些行来解决这个IE10错误(使用jquery):
$('#yourframeid').height( $('#yourframeid').height()+1 );
$('#yourframeid').height( $('#yourframeid').height()-1 );
我希望它对你有用......
答案 7 :(得分:0)
经过一番研究后,我解决了这个问题,即10个问题。我发现只有'cols'属性不适用于iframe,但'rows'属性正常工作,所以我添加了一行,它对我有效。
var frameSet = document.getElementById("uxResultsFrameset");
if ($.browser.msie && $.browser.version == 10)
frameSet["rows"] = "100%"; //sets a row to overcome the issue in case of ie10 only
frameSet[orient] = "50%,50%";