2012-01-30 66 views
0

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

不幸的是,在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.插入打开HTML标记后,将下面的代码dialog.html

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

因为我不想改变应用程序(尤其是框架basedness)的整体结构,我不知道如果我做错了某些事情,或者如果我在Internet Explorer中发现了一个错误,则欢迎提供解决此问题的任何提示。

回答

1

我还就Internet Explorer Web Development Forum的问题,并能得到我想要分享这里的解决方案:

据微软连接,测试中得以验证,这个问题就解决了Internet Explorer中 10在Windows 8 Developer上。

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

2

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

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

“≮元HTTP的当量=” X-UA兼容”内容= “IE = EmulateIE8 ≯”

我希望这将有所帮助。

+0

此问题最近出现在IE11上。我的对话框没有文档类型,所以我无法使用D.Calliess的解决方案。您的解决方案适用于IE11! – Keorl 2015-08-14 13:35:14

0

将此代码添加到对话框。html

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