Frameset + cols IE10

时间:2012-09-03 13:55:58

标签: javascript frameset internet-explorer-10

我在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>

8 个答案:

答案 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)

答案 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%";