Подтвердить что ты не робот

Будет ли рендеринг iframe в режиме quirks?

Я работаю над настройкой страницы, и у меня возникают трудности с тем, чтобы она выглядела хорошо в браузерах (на самом деле это просто IE, поскольку он правильно отображает mozilla и webkit). Я хочу исключить режим quirks, прежде чем серьезно рассматривать старые ошибки IE, исправленные с IE6. Страница контейнера имеет объявленный doctype, однако код iframe этого не делает. Будет ли отображаться контент iframe в режиме quirks (поскольку он не имеет типа doctype) или стандартов (потому что контейнер имеет doctype)? Источник следует этой схеме:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
...
<body>
...
<iframe ...>
    <html>
    <head>
    ...
    </head>
    <body>
    ....
    </body>
    </html>
</iframe>
...
</body>
</html>
4b9b3361

Ответ 1


EMPTOR CAVEAT

Как некоторые из них, к сожалению, не заметили, что этот ответ был опубликован и принят достаточно долго, прежде чем IE9 существует, что изменяет условия вопроса. Я бы, как правило, удалил это, чтобы не улавливать больше downvotes, но поскольку ответ на самом деле по-прежнему остается верным и, к сожалению, имеет отношение к значительной части демографических данных браузера, я оставлю его. Просто, пожалуйста, не уменьшайте его больше.


Quirksmode: IE отображает iframe как отдельные узлы документа, doctype не наследуется, а quirks - по умолчанию.

Изменить: кто-то еще демонстрация вашей проблемы и доказательство ненаследования (благодаря моим закладкам: P)

Однако вы выбрали "Почти" как ваш doctype, что означает, что iframes не разрешены в любом случае. Единственный способ получить действительные iframe - это если родительский элемент был в причудах, который делает наследование или не является спорным.

Рекомендуемое чтение.

Ответ 2

До IE9 веб-страница в iframe будет отображать в соответствии со своим собственным doctype, а не в соответствии с doctype родительского контейнера. Однако в IE9 Microsoft изменила поведение так, чтобы дочерний iframe наследовал свой doctype/rendering из родительского контейнера.

Обратите внимание, что IE9 по-прежнему будет вести себя традиционным образом (iframe почитает свой собственный doctype), когда используется представление совместимости.

Лучшим обходным решением для людей в вашей ситуации - написанием страницы контейнера, совместимой со стандартами, но требующей включения iframe с страницей режима quirks - является добавление одного из следующих метатег между вашим типом doctype и тегом открытия в родительская страница.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<meta http-equiv="X-UA-Compatible" content="IE=8" />

Эти теги будут по существу говорить IE9, чтобы притвориться, что это IE7 или IE8. Включение в эмуляцию - это логика, используемая для определения режима рендеринга для дочернего iframe. Недостатком этого обходного пути является то, что вы не сможете использовать какие-либо новые функции, поддерживаемые IE9 на родительской странице, но это, вероятно, предпочтительнее массивные ошибки рендеринга на дочерней странице.

Подробнее см. http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you-743000.html.

Ответ 3

См. мой ответ здесь для документарного решения MSDN для IE9: Как заставить Iframe запускать причуды под стандартным родительским кадром

Короче говоря, невозможно запустить режим quirks в iframe, если родительская страница выполняет рендеринг в режиме IE9, но возможно для запуска эмуляции режима ожидания " встроенный в движок рендеринга IE9.

JSBin demo: http://jsbin.com/ozejuk/1/

Дополнительная литература: http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx