Internet Explorer 9忽略带有框架集的showModalDialog的dialogWidth / Height

时间:2012-01-30 17:01:42

标签: internet-explorer size modal-dialog frameset

我有一个较旧的Intranet应用程序需要在模式对话框窗口中显示两个框架(固定菜单栏和可变内容数据视图)。目前使用window.showModalDialog功能打开对话框,一切正常,只要我在Internet Explorer 8中打开页面(使用任何查看模式)或在Internet Explorer 9中打开兼容性视图已启用。

不幸的是,当关闭IE9中的兼容性视图时,无论指定的dialogWidth和dialogHeight值如何,对话框窗口总是以266 x 138像素的大小打开。我创建了一个显示问题的小例子:

index.html(最初加载的页面):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
    <input type="button" value="popup" 
        onclick="showModalDialog ('dialog.html', null, 'dialogWidth:500px;dialogHeight:400px;resizable:yes')" />
</body>
</html>

dialog.html(在对话框窗口中打开的页面):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<frameset rows="*, 70">
    <frame src="frame1.html" />
    <frame src="frame2.html" />
</frameset>
</html>

frame1.html / frame2.html(两个帧的内容):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
    <p>Frame Content</p>
</body>
</html>

如果我在对话框中显示框架集文档,则只会出现此问题。打开常规html文档(包含带有某些内容的主体)时,大小按函数调用中的指定设置。

此外,在加载文档后更改对话框大小仅适用于常规文档,而不适用于框架集,f.e。在 dialog.html 中打开html标记后插入以下代码:

<head>
    <script type="text/javascript" />
        window.setTimeout (function () { window.dialogWidth = "500px"; window.dialogHeight = "400px"; }, 10000);
    </script>
</head>

因为我不想改变应用程序的整体结构(特别是基于框架的),我不知道我做错了什么或者我是否在Internet Explorer中发现了一个错误,欢迎解决此问题的提示。

3 个答案:

答案 0 :(得分:2)

我也面临同样的问题,最后通过将元标记兼容性更改为ie8来为我工作。

删除模型对话框中的所有doctype,只需添加元标记

“≮meta http-equiv =”X-UA-Compatible“content =”IE = EmulateIE8≯“

我希望这会有所帮助。

答案 1 :(得分:1)

我还在Internet Explorer Web Development Forum上讨论了这个问题,并且能够获得我想在此分享的解决方案:

根据Microsoft Connect, Testing能够验证此问题 在Windows 8开发人员的Internet Explorer 10中解决

对于IE9,可以通过删除 dialog.html 中的doctype声明来绕过此问题。这会强制此特定页面进入Quirks模式,但对话框会再次以正确的大小显示。

答案 2 :(得分:0)

将此代码添加到dialog.html

<head>
    <script>
    (function () {
        var _b = document.createElement('body');
        var _doc = document.documentElement;
        _doc.insertBefore(_b, _doc.firstChild );
        _doc.removeChild(_b);
    })();
    </script>
</head>