我有一个较旧的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中发现了一个错误,欢迎解决此问题的提示。
答案 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>