Internet Explorer 9 игнорирует dialogWidth/Height для showModalDialog с набором фреймов

У меня есть старое приложение для интрасети, которое должно отображать два фрейма (фиксированную строку меню и представление данных с переменным содержимым) внутри модального диалогового окна. На данный момент диалог открывается с помощью функции window.showModalDialog, и все работает нормально, пока я открываю страницу в Internet Explorer 8 (с любым режимом просмотра) или в Internet Explorer 9 с Просмотром в режиме совместимости включено.

К сожалению, при отключении Просмотра в режиме совместимости в IE9 диалоговое окно всегда открывается с размером 266 x 138 пикселей, независимо от указанных значений dialogWidth и dialogHeight. Я создал небольшой пример, показывающий проблему:

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-документа (содержащего тело с некоторым содержимым) размер устанавливается таким, как указано в вызове функции.

Кроме того, изменение размера диалогового окна после загрузки документа работает только для обычных документов, а не для наборов фреймов, т.е. вставьте следующий код после открывающего HTML-тега в dialog.html:

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

Поскольку я не хочу менять общую структуру приложения (особенно фрейм-ориентированность) и не знаю, делаю ли я что-то не так или нашел ошибку в Internet Explorer, какие-либо подсказки по устранению эта проблема приветствуется.


person Daniel Calliess    schedule 30.01.2012    source источник


Ответы (3)


С той же проблемой я также столкнулся, наконец, это сработало для меня, изменив совместимость метатегов на ie8.

Удалите все эти типы документов в диалоговом окне модели и просто добавьте метатег, например

" meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"

Я надеюсь, это поможет.

person user2406101    schedule 25.08.2014
comment
Эта проблема появилась недавно в IE11. В моем диалоговом окне не было типа документа, поэтому я не смог использовать решение D.Calliess. Ваши решения работали в IE11! - person Keorl; 14.08.2015

Я также обсуждал эту проблему на Форум веб-разработчиков Internet Explorer, и мне удалось найти решение, которым я хочу поделиться здесь:

Согласно Microsoft Connect, в ходе тестирования удалось убедиться, что эта проблема устранена в Internet Explorer 10 в Windows 8 Developer.

Для IE9 эту проблему можно обойти, удалив объявление типа документа внутри dialog.html. Это переводит эту конкретную страницу в режим Quirks, но затем диалоговое окно снова отображается в правильном размере.

person Daniel Calliess    schedule 13.02.2012

Добавьте этот код в dialog.html

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